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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我没心没肺,。 中级黑马   /  2015-4-9 10:50  /  2924 人查看  /  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 个回复

倒序浏览
1,首先你的main()函数错了  应该是main(String[] args)
2,输出的是false
原因:
1,==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等。
2,两条new 语句创建了两个对象,然后用s1,s2 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即s1 和s2 中存储的数值是不相同的,所以,表达式s1==s2 将返回false
回复 使用道具 举报
主函数写错啦
回复 使用道具 举报
肯定是false啊,s1和s2存储的是地址值,肯定是不一样的
回复 使用道具 举报
答案明显是false,==是比较两个内存地址,肯定不一样,用使用equals比对具体的值才行
回复 使用道具 举报
主函数书写错误。按程序,输出结果是false,因为string类是引用数据类型,newstring()会在内存中开辟空间存储对象。两条语句是两个对象,所以不相等
回复 使用道具 举报
结果是false,应为对比的是他们的哈希值,如果用equals结果是true对比的是对象当中的内容
回复 使用道具 举报
我想说的是,主函数那样写也是可以的
回复 使用道具 举报
这个是全部都要比较的,不只是值还有存储地址
回复 使用道具 举报
lurenge 发表于 2015-4-9 11:22
1,首先你的main()函数错了  应该是main(String[] args)
2,输出的是false
原因:

客官回答的很详细,。有一点就是,主函数像他这么写也是可以的。现在的习惯是把[]放中间。不过放在右边也不为错
回复 使用道具 举报
肯定是false,你new了两个String,也就是说你在内存中开辟了两块空间,这两块空间的地址肯定不一样,而s1、s2储存的是地址值,那么这两个string就肯定不一样。
回复 使用道具 举报
输出值是false啦,换做equals就true啦
解释一下==号,他比较的是一个对象在内存中的地址值,
2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。

equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。

在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
回复 使用道具 举报 1 0
false啦   原因么上面讲的很清楚了  我就不说了
回复 使用道具 举报
君嘘 来自手机 中级黑马 2015-4-9 14:58:27
14#

因为str是字符串常量   存储在方法区中  
然后你new了两个对象就代表堆内存中有s1和s2   
==比较的是两个对象在内存中的地址是否相同
equals比较的是对象中的常量是否相同
回复 使用道具 举报
这里先说明一下,你的main函数没有写错,这样写也是可以的,但是我们经常见到的是public static void main(String args[]),然后关于你的问题,答案应该是false,这里你建立的是对象,用“==”会将他们的地址进行比较,显然是不正确的,如果你让两个字符串进行比较可以使用equals,
回复 使用道具 举报
结果当然是false,因为s1和s2是不同的对象,地址值都不一样。
回复 使用道具 举报
(String args[])这个括号是中文字符,修改后,会是false。
回复 使用道具 举报
围观,false值
回复 使用道具 举报
你new了两个对象,用==是比较两个对象在内存中的地址值,这两个对象的地址值是不同的,所以返回的就是false
回复 使用道具 举报
两次new了两个不同的对象
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马