黑马程序员技术交流社区
标题:
String字符串的问题
[打印本页]
作者:
mafu1993
时间:
2016-10-11 00:47
标题:
String字符串的问题
public static main(String[] args){
String s1 = new String();
s1 = "hello';
String s2 = new String();
s2 = "hello';
System.out.println(s1==s2);//结果为true
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);//结果为false
}
谁能帮我解释下上面的代码问题啊,==这个逻辑判断符是比较地址值的啊,上面这个结果有点不明白
作者:
shengbo7
时间:
2016-10-11 07:31
下面的new了两个对象,两个对象的地址值是不同的,所以false,上面的是s1和s2都赋值成相同的值,所以true
作者:
songchangchang
时间:
2016-10-11 09:28
字符串被赋值相当于常量,s1被赋值后指向了方法区常量池中hello的地址,s2虽然创建了对象,但你再给他赋值hello的话还是先从常量池中找,找到了就直接把常量池中hello的地址值给s2了,所以他们地址值变相同了.
下面是地址值不同
作者:
哦啊啊
时间:
2016-10-11 11:04
常量池没有就创有就不创
作者:
zhichi123
时间:
2016-10-11 13:20
没有new就直接调取常量池 常量池里面存的地址一样的
作者:
叫我宁采臣
时间:
2016-10-11 20:37
第二个是在堆内存 的 第一个是在方法区
作者:
Jarc
时间:
2016-10-11 22:50
只要不用new,就从常量池直接拿,并且不会创建多次
作者:
zhaokun1114
时间:
2016-10-11 23:00
6666666666666666666666
作者:
飞舞的指尖
时间:
2016-10-11 23:26
== 比较的是地址值, new 对象时每次都会产生不同的地址值,所以,将new的对象的地址值赋值给s时,两个s 的地址值是不同的
作者:
马文丽
时间:
2016-10-11 23:37
解释的人这么多,那我就鼓励鼓励你,顺便挣黑马币{:2_32:}加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2