一个简单的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
请教下下 展开
{
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
请教下下 展开
展开全部
因为str1和str2是在堆内存中创建了2个不同的对象,用"=="比较的时候,是比较的内存地址,所以str1!=str2.
而str3=str1;这句的意思是让str3也指向了str1,他们两个引用str1这同一个对象.所以他们是相等的.
第二个程序是因为String类重写了equals方法,比较的是两个对象的内容是否相等.因为他们的值都是"abc",所以都相等.
而str3=str1;这句的意思是让str3也指向了str1,他们两个引用str1这同一个对象.所以他们是相等的.
第二个程序是因为String类重写了equals方法,比较的是两个对象的内容是否相等.因为他们的值都是"abc",所以都相等.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str1!=str2
str1 str2是引用,放在栈中,分别指向放在堆中不同位置的两个“abc”
str3=str1意思是让str3和str1指向堆中相同位置的"abc"
所以str3==str1
Objec.equals本来比较的是引用,但是String.equals()重写了equals()方法,比较的是内容。所以。。。
str1 str2是引用,放在栈中,分别指向放在堆中不同位置的两个“abc”
str3=str1意思是让str3和str1指向堆中相同位置的"abc"
所以str3==str1
Objec.equals本来比较的是引用,但是String.equals()重写了equals()方法,比较的是内容。所以。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先来说说你定义的3个String
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
任何对象实例化(new Object)的时候都会在内存中新分配空间建立对象,
str3 = str1是将str1的引用赋给str3,所以他们指向同一个内存地址。
"=="对于对象来说是比较对象的地址,而equals是比较对象内容
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
任何对象实例化(new Object)的时候都会在内存中新分配空间建立对象,
str3 = str1是将str1的引用赋给str3,所以他们指向同一个内存地址。
"=="对于对象来说是比较对象的地址,而equals是比较对象内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谁说.equals比较的是内容?别误导别人,回去看看API文档
hnxpmm 说的对,String类重写了.equals方法
hnxpmm 说的对,String类重写了.equals方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
==是引用比较,只是比较两个引用string1和string2是否指向同一个对象。在Compare1里,str1和str2的两个实例,虽然都是“abc”,但是内存中不是同块,而是两块。而str1和str3在内存里是指向同一块的,同样指向str1的“abc”.
equal就不多说了, 它是正常的字符串的比较。
学JAVA,建议看看马士兵老师关于内存分析的那部分内容,很有用!
呵呵,你学的可真多呀!!!
equal就不多说了, 它是正常的字符串的比较。
学JAVA,建议看看马士兵老师关于内存分析的那部分内容,很有用!
呵呵,你学的可真多呀!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询