String家族易考笔试题
1 所属的包 继承关系 实现接口
2 String构建方式
3 String对象的存储
4 ==与equals方法的区别
*5 String的不可变特性
6 String中常用的方法(比如给你个程序 给出运行结果)
7 String与StringBuffer区别 或 String与StringBuilder区别
8 StringBuffer与StringBuilder区别
1.所属的包 继承关系 实现接口
java.lang包 无需导包
String默认继承Object类 实现三个接口Serializable CharSequence Comparable
2.String构建方式
常量 构造方法
3.String对象的存储
String str = “abc”——>存储在字符串常量池 此时abc只有常量池中这一份
String str = new String(“abc”);——> 产生几个对象?
一个或两个
如果常量池原来没有”abc” 就是两个
对象引用存储在堆内存中 此时abc有两份 一份在常量池中 一份在堆中
堆中的值是从常量池中复制出来的
如果常量池原来有”abc” 就是一个
4.==与equals方法的区别
==可以比较基本数据类型 也可以比较引用数据类型(比较的都是变量中存储的内容)
若比较的是基本类型 比较的是变量存储的值
若比较的是引用类型 比较的是变量中存储的地址引用
equals()只能比较引用类型
是Object类中继承过来的方法 每一个引用类型都可以调用
默认的equals()方法比较规则与==一致
但是String类重写了equals()方法 所以String比较的是字符串中的字面值是否相等
String s1 = "abc";//"abc"应该是一个对象 abc可以视为常量 存储在常量区里
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s3==s4); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
System.out.println(s3.equals(s4)); //true
//String类将继承自Object类的equals方法重写了
//将原有比较==的关系改完比较字符值
*5.String的不可变特性
体现在两个地方 长度及内容
长度—->final修饰的数组地址引用不变 且数组长度本身不可变
内容—->private修饰的属性 不能在类的外部访问
在String类中包含一个数组 private final char[] value; //存储String中的每一个字符
所以 final修饰的数组地址不变 且数组长度本身不可变
又private修饰 所以数组中的内容不可改变
6.String中常用的方法—-(注意与StringBuilder的区别)
String类中没有的方法
append(); insert(); delete(); deleteCharAt(); reverse();
String类同名的方法 名字相同 用法不一致
length(); charAt(); codePointAt(); indexOf(); lastIndexOf();
substring(); replace();
不常用的方法
ensureCapacity(); capacity(); setLength(); trimToSize(); setCharAt();
7.String与StringBuffer区别 或 String与StringBuilder区别
String
JDK1.0
实现了一个接口Comparable
String的不可变特性 长度和内容
有一些方法StringBuilder没有 比如concat(); compareTo(); toUpperCase();
StringBuilder
JDK1.5
实现了一个接口Appendable
StringBuilder是可变字符串 没有final修饰 可以扩容
有一些方法String没有 比如append(); reverse(); delete(); insert();
8.StringBuffer与StringBuilder区别
StringBuffer是早期版本JDK1.0
StringBuilder是后来的版本JDK1.5
方法几乎都一样
StringBuffer 线程同步 安全性较高 执行效率相对较低
StringBuilder 线程不同步 安全性较低 执行效率相对较高