黑马程序员技术交流社区
标题:
s2是指向哪里的?
[打印本页]
作者:
bigbean
时间:
2014-3-1 19:34
标题:
s2是指向哪里的?
本帖最后由 bigbean 于 2014-3-1 20:11 编辑
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
System.out.println(s1==s2);
System.out.println(s1==s3);
复制代码
这三个变量都是abc,为什么System.out.println(s1==s2)的结果是false啊,s2的值不是指向字符串常量值abc的地址吗?
作者:
volvoxc
时间:
2014-3-1 19:42
”==“ 比较的是两个对象在内存中的地址是否相同,要比较他们的值是否相同用equals.
作者:
java--周群
时间:
2014-3-1 19:59
String s2 = new String("abc");
这是在堆内存创建了字符串对象。s2指向的是堆内存地址值
String s1 = "abc";
String s3 = "abc";
s1创建的时候会在常量池记录一个地址值,当s3再创建时,首先在常量池寻找存在abc,就不再创建了,把常量池的abc地址值赋值给s3 s1=s3的
作者:
午夜b'Boy
时间:
2014-3-1 20:01
String s1 = "abc"; 没用new关键字,存在常量池中。String s2 = new String("abc");使用new关键已字,存在堆内存中,返回false
作者:
bigbean
时间:
2014-3-1 20:12
java--周群 发表于 2014-3-1 19:59
String s2 = new String("abc");
这是在堆内存创建了字符串对象。s2指向的是堆内存地址值
谢谢,知道了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2