// String类面试题
/*
* * 1.判断定义为String类型的s1和s2是否相等 String s1 = "abc"; String s2 = "abc";
* System.out.println(s1 == s2); //false,比较的是两个常量区的地址值
* System.out.println(s1.equals(s2)); //true ,equals方法比较的是具体的值
*/
/*
* 2.下面这句话在内存中创建了几个对象? String s1 = new String("abc"); //创建了两个对象,new abc
* 在堆内存中 ,s1 在常量池中
*/
/*
* 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 , equals方法比较具体的值
*/
/*
* 4.判断定义为String类型的s1和s2是否相等 String s1 = "a" + "b" + "c"; String s2 =
* "abc"; System.out.println(s1 == s2); //true ,
* 常量优化机制,编译时s1="abc",创建s2时,找到了已经创建的"abc",直接将地址值赋值给s2
* System.out.println(s1.equals(s2)); //true , equals方法比较具体的值
*/
/*
* 5.判断定义为String类型的s1和s2是否相等 String s1 = "ab"; String s2 = "abc"; String
* s3 = s1 + "c"; System.out.println(s3 == s2); //false,
* StringBuffer内组合成
* "abc",再调用toString方法转成String型,s3是toString方法的地址值,s2是常量池地址值
* System.out.println(s3.equals(s2)); //true , equals方法比较具体的值
*/
|
|