java 字符串比较问题

public class test04 {
public static void main(String[] args){
String str1=new String("world");
String str2=new String(str1);
if(str1==str2)
{
System.out.println("相等");
}
else
System.out.println("不相等");
}
}
为什么显示不相等啊

肯定不相等的 String str1=new String("world");像这样的变量 其实创建了2个对象 1个对象是world 另一个对象是指向world的引用str1 这里的str1会在你的内存空间中分出一个地址出来表示他指向了world str2也是一样的 就相当于是在内存中存在了两个圆 一个圆的地址是str1 另一个是str2 而这个圆是不交叉的 所以比较起来肯定是不相等的追问

不是很名明白,我是新手,请详细说说

追答

我这个说得是很详细了啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-10

你好!


这里的(str1==str2)属于比较两个对象,但是他们都是分别new出来的,所以这两个对象当让不相等了。

如果是下面的情况会等到相等的结果:

     String str2 = str1;

    或者if的条件变成   if(str1.equals(str2))  

第2个回答  2013-07-10
public static void main(String[] args){
String str1="world"; //赋值直接这样写就可以
String str2=str1; //赋值同上
if(str1==str2)
{
System.out.println("相等");
}
else
System.out.println("不相等");
}
}

这样才是相等。追问

为什么这样相等,而那个却不相等

追答

这么说吧:
String str1="world"; 是你创建了一个str1,并直接给它赋值,让str1等于world;
String str2=str1;是直接把str1的值赋给str2。

但是String str1=new String("world");
String str2=new String(str1);这里new表示又创建了一个str1,并不是直接赋值,就是说你代码里面第一个str1和str1已经不是同一个东西,虽然名字一样

第3个回答  2013-07-10
== 字符串在内存中的地址相同返回true

如果比较字符串值相等的话用equals
第4个回答  2013-07-10
用 if (str1.equals(str2)) 进行比较啊。
第5个回答  2013-07-10
两个String对象就算字符串一样用==号比较他们也是不相等的,更何况你的字符串不同呢,比较java
String 要用equals(Object anObject) 方法
相似回答