一个简单的java字符串比较问题

classCompare1{publicstaticvoidmain(String[]args){Stringstr1=newString("abc");Stringst... class Compare1
{
public static void main(String[] args)
{
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1 == str2)
System.out.println("str1 == str2");
else
System.out.println("str1 != str2");
if(str1 == str3)
System.out.println("str1 == str3");
else
System.out.println("str1 != str3");
}
}

为什么这个运行下的结果是
str1 != str2
str1 == str3


class Compare2
{
public static void main(String[] args)
{
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1.equals(str2))
System.out.println("str1 equal str2");
else
System.out.println("str1 not equal str2");
if(str1.equals(str3))
System.out.println("str1 equal str3");
else
System.out.println("str1 not equal str3");
}
}
这个的运行结果是
str1 equal str2
str1 equal str3

请教下下
展开
 我来答
晨临雾散
2009-08-04 · TA获得超过577个赞
知道小有建树答主
回答量:799
采纳率:0%
帮助的人:0
展开全部
str1,str2你定义成了对象,在做str1 == str2时,由于对象比较的是地址,所有不可能相等,而equals 是比较其内容所以一样。在做str1 == str3,由于str3定义的是一个简单类型,所以他们比较的就是其内容,所以就一样了,equals就没必要说了
百度网友388688327
2009-08-04 · TA获得超过1053个赞
知道小有建树答主
回答量:1297
采纳率:0%
帮助的人:967万
展开全部
因为str1和str2是在堆内存中创建了2个不同的对象,用"=="比较的时候,是比较的内存地址,所以str1!=str2.

而str3=str1;这句的意思是让str3也指向了str1,他们两个引用str1这同一个对象.所以他们是相等的.

第二个程序是因为String类重写了equals方法,比较的是两个对象的内容是否相等.因为他们的值都是"abc",所以都相等.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SecretPurple
2009-08-04 · 超过12用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:31.2万
展开全部
str1!=str2
str1 str2是引用,放在栈中,分别指向放在堆中不同位置的两个“abc”

str3=str1意思是让str3和str1指向堆中相同位置的"abc"
所以str3==str1

Objec.equals本来比较的是引用,但是String.equals()重写了equals()方法,比较的是内容。所以。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奋斗xiao蜗牛
2009-08-04 · TA获得超过194个赞
知道答主
回答量:58
采纳率:0%
帮助的人:81.5万
展开全部
先来说说你定义的3个String
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
任何对象实例化(new Object)的时候都会在内存中新分配空间建立对象,
str3 = str1是将str1的引用赋给str3,所以他们指向同一个内存地址。

"=="对于对象来说是比较对象的地址,而equals是比较对象内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘉尔的爸爸
2009-08-04 · TA获得超过1820个赞
知道小有建树答主
回答量:1013
采纳率:0%
帮助的人:298万
展开全部
谁说.equals比较的是内容?别误导别人,回去看看API文档
hnxpmm 说的对,String类重写了.equals方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heirenhua
2009-08-04
知道答主
回答量:18
采纳率:0%
帮助的人:17.2万
展开全部
==是引用比较,只是比较两个引用string1和string2是否指向同一个对象。在Compare1里,str1和str2的两个实例,虽然都是“abc”,但是内存中不是同块,而是两块。而str1和str3在内存里是指向同一块的,同样指向str1的“abc”.
equal就不多说了, 它是正常的字符串的比较。
学JAVA,建议看看马士兵老师关于内存分析的那部分内容,很有用!
呵呵,你学的可真多呀!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式