这个java编程题,结果为什么是 true false true true

classExample{publicstaticvoidmain(Stringargs[]){Strings1,s2;s1=newString("wearestuden... class Example
{public static void main (String args[])
{
String s1,s2;
s1=new String("we are students");
s2=new String("we are students");
System.out.println(s1.equals(s2));
System.out.println(s1==s2);
String s3,s4;
s3="how are you";
s4="how are you";
System.out.println(s3.equals(s4));
System.out.println(s3==s4);
}
}
展开
 我来答
泰然还素净的海鸥H
2012-11-13 · TA获得超过332个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:135万
展开全部
首先要明白一个概念,java中new出来的对象存放在堆里。专门针对字符串有一个“String pool”。s1 = new String("we are students")这一句,首先会在“String pool”里查找有没有we are students这个字符串,结果没找到,就创建一个。然后通过这个字符串构建一个String对象存放这这个字符串的引用,放在堆里。s2=new String("we are students")这里又会去“String pool”里查找有没有we are students这个字符串,结果找到了,那么在“String pool”里不会继续创建这个字符串,但是应为使用了new所以会在堆里又创建一个String对象的引用,指向这个字符串。String里的equals方法比较的是字面量,所以返回true。“==”比较的是内存地址所以的false。后面的两个赋值则是同样的概念,都是指向“String pool”里的“how are you”这个字符串。所以都是true
yzy727
2012-11-13 · 超过12用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:17.8万
展开全部
对于String str = new String("Good morning");说明如下:
该句话创建了两个对象,new String("Good morning"), 和 “Good morning”本身也是一个对象放在堆内存中的。str只是指向 new String("Good morning")对象的一个变量;
所以就有,s1和s2 都通过new的方式创建的,因此是两个不同的对象,所以s1==s2为false,
至于为啥s1==s2为false呢,可以理解为比较的是对象的hashcode(或简单的理解为地址吧),因为地址不一样,所以不等;
s1.equals(s2))为true的原因:equals()比较的是“值”。
彻底理解上面的问题,你需要了解java中的堆和栈的概念,内存分配的方面的知识。
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9c1de7f
2012-11-13 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:87.6万
展开全部
每次用new 的时候,开辟新空间,并将地址返回给 s1和s2 。

所以两个地址不一样,导致s1、s2 内容不一样,false。 equals 比较的是所指向的内容,所以true

下面的赋值时, “how are you” 是字符常量,先开辟空间,然后将地址引用赋值给 s3 和s4

所以 两个 都是true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘿_行
2012-11-13 · TA获得超过158个赞
知道答主
回答量:190
采纳率:0%
帮助的人:152万
展开全部
equals是两个对象的值相同,而==要求是同一个对象, 对于==的判断,其实是调用了object里的两个方法进行判断 一个是hash值是否相同,一个就是值是否相同,具体函数形式,这个时候忘了,呵呵,如果能让你想起来些什么最好,没有的话,那就抱歉了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2012-11-13 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2291万
展开全部
s1, s2内容一样,equals返回true,不是同一个对象实例,==返回false
s3, s4引用同一个常量字符串,equals,== 都是true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式