黑马程序员技术交流社区
标题:
String类的==与equals比较:
[打印本页]
作者:
gczsjj
时间:
2017-1-16 23:29
标题:
String类的==与equals比较:
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”);
//两个,”abc”在常量池,new 的在堆内存中
3. 判断定义为 String 类型的s1和s2是否相等:
String s1 = new String(“abc”); //s1在堆内存中
String s2 = “abc”; //s2在方法区的常量池中
System.out.println(s1 == s2); //false
4. 判断定义为String 类型的s1和s2是否相等.
String s1 = “a” + “b” + “c”;
String s2 = “abc”;
System.out.println(s1 == s2); //true,java中有常量优化机制
System.out.println(s1.equals(s2)); //true
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
//s1 + “c” 是先在堆内存中创建一个StringBuffer sb对象,然后将s1的内容的”ab”与”c”通过append()方法sb对象中,当sb调用toString()方法时,再创建一个String s对象,存放其内容”abc”,并将对象s的地址值赋给s3.
作者:
袁志娜
时间:
2017-1-16 23:35
作者:
wuhaixin
时间:
2017-1-16 23:46
可以,很细节
作者:
jiangyu
时间:
2017-1-17 00:30
学习了!!!
作者:
guyouzhong
时间:
2017-1-17 00:37
老题目了
作者:
愤怒的大飞机
时间:
2017-1-17 07:30
还真不知道第四个
作者:
Mbs2016
时间:
2017-1-17 12:55
谢谢了,以前没理解的这么深。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2