String类的常见面试题
- 1.判断定义为String类型的s1和s2是否相等
- String s1 = "abc"; //常量池中没有这个字符串对象,就创建一个,如果有直接用即可
- String s2 = "abc";
- System.out.println(s1 == s2); //true
- System.out.println(s1.equals(s2)); //true
- 2.下面这句话在内存中创建了几个对象?
- String s1 = new String("abc"); //创建两个对象,一个在常量池中,一个在堆内存中
- 3.判断定义为String类型的s1和s2是否相等
- String s1 = new String("abc"); //记录的是堆内存对象的地址值
- String s2 = "abc"; //记录的是常量池中的地址值
- System.out.println(s1 == s2); ? //false
- System.out.println(s1.equals(s2)); ? //true
- 4.判断定义为String类型的s1和s2是否相等
- String s1 = "a" + "b" + "c"; //byte b = 3 + 4; //在编译时就变成7,把7赋值给b,常量优化机制
- String s2 = "abc";
- System.out.println(s1 == s2); ? //true,java中有常量优化机制
- System.out.println(s1.equals(s2)); ? //true
- 答:String s1 = "a" + "b" + "c"; 编译时就会对其进行优化为“abc”在赋值给s1.
- 5.判断定义为String类型的s1和s2是否相等
- String s1 = "ab";
- String s2 = "abc";
- String s3 = s1 + "c";
- System.out.println(s3 == s2); //false
- System.out.println(s3.equals(s2)); ? //true
- 答:s3=s1+"c"; 底层是创建以个StringBuffer对象进行append,在调用toString方法转换为String对象,赋值给s3.