A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我没心没肺,。 中级黑马   /  2015-4-9 10:50  /  2944 人查看  /  39 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class H1{
          public static void main(String args[])
{
                String s1=new String("abc");
                String s2=new String("abc");
if(s1==s2)
                  System.out.println("true");
else
                  System.out.println("false");
}
}
请问运行的结果是什么?Why?

39 个回复

正序浏览
答案为假,至于为什么 上面讲的很清楚了
回复 使用道具 举报
lurenge 发表于 2015-4-9 11:22
1,首先你的main()函数错了  应该是main(String[] args)
2,输出的是false
原因:

没错吧   这种写法是可以的啊
回复 使用道具 举报
主函数那样写是可以的
回复 使用道具 举报
比较的是两个地址,
好像可以这样实现
if (s1.compareTo(s2)==0)   
回复 使用道具 举报
每一次使用new关键字都会在堆内存中开辟一块内存,并把这块内存的地址赋值给对应的变量,所以这连个字符串并不是指向同一块内存区域,自然他们就不是同一个对象,所以结果自然明了
回复 使用道具 举报
false嘛,哥们儿,再学习一下String类的两个引用对象在堆内存的表现形式,一切就OK了
回复 使用道具 举报
false啦.==判断的是地址是否相同,这两个string内容一样,但是对象地址不同
回复 使用道具 举报
new创建的是两个对象,==比较的对象的地址值,所以输出是false。如果改成String s1="abc"; String s2="abc",输出的就是true。因为s1会创建,s2会指向s1的对象。字符在常量池中选择的,已经有相同的就不会再创建了。
回复 使用道具 举报
false,围观。
回复 使用道具 举报
false 因为==号判断的是储存的首地址,并不是两者的值是否相等,所以是false
回复 使用道具 举报
肯定是false
回复 使用道具 举报
奋斗_168 发表于 2015-4-9 15:35
这里先说明一下,你的main函数没有写错,这样写也是可以的,但是我们经常见到的是public static void main( ...

这个程序就一个main函数,他写成这样不是错了么?
求大神解释?
回复 使用道具 举报
这帖子里边 好多都是这个问题啊: 显然false  ==比较的是内存地址,s1 s2 两个对象,两个地址,肯定不相等
回复 使用道具 举报
原因:String s1 = new String()创建一个对象,s2同样也是对象,==比较的是引用,对象的引用不相等
回复 使用道具 举报
输出false
回复 使用道具 举报

实践是检验真理的唯一标准!!!!!
回复 使用道具 举报
false  你现在比较的是内存地址  肯定是不同的
回复 使用道具 举报
false吧,,s1,s2存的地址吧
回复 使用道具 举报
楼主最好看一楼的,说的非常详细
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马