日期:2014-05-20  浏览次数:20673 次

关于字符串常量相等的问题。?
public   class   Test1{
public   static   void   main(String   args[])
{
String   a= "java ";
String   b= "java ";

System.out.println(a==b   ?   "a==b ":   "a!=b ");

}


}

不明白上面这个程序的执行结果为什么是:a==b?
我觉得不相等。难道常量的值相等,则a和b指的就一定是一个地址么?

------解决方案--------------------
你可以看看你上几楼有一篇文章,你的问题答案一清楚二楚,Java精华积累:每个初学者都应该搞懂的问题!
------解决方案--------------------
a ,b 都是指向java对象的引用  所以相等
String a= "java ";  String b= "java ";  这样a==b 为 true
String a=new String( "java "); String b=new String( "java "); 这样a==b 为false a,b是不同的对象 要想相等,应该这样写a.equals(b)

------解决方案--------------------
是的要弄清哦
String a= "java ";
String b= "java ";
-----------------
String a=new String( "java ");
String b=new String( "java ");
------------------
------解决方案--------------------
“java”是String型对象,a是对这个对象的引用,指向这个 "java ",b也是对这个对象的引用,也是指向 "java ",他们指向同样的地址,所以相等。
正如楼上说的如果:
String a=new String( "java "); String b=new String( "java ");
那么你是声名了两个对象a和b,地址不同,所以a==b 为false
------解决方案--------------------
给你说说string的相关知识吧:


对于string对象:使用new和不使用new的差别:
用new的话就明确的告诉了JVM这个串对象需要新创建,也不是到串池里取。而s= "Hello "会先到串池里取,没有才新创建并放到池里。比如:
String s1 = new String( "Hello ");
String s2 = "Hello ";
String s3 = "Hello ";
则会创建两个String对象(值都为 "Hello "):s1指向一个,s2和s3共同指向一个,且s2和s3指向的对象放在串池里。
建议:尽量使用String s = "Hello "的形式,这样提高效率。

String 的比较:equals()方法与==有何不同
一般,equals比较变量的值是否相等,而==是比较变量的内存地址是否相等(即同一对象)。比如上面定义的String中:
s1.equals(s2)、s1.equals(s3)、s2.equals(s3)以及s2==s3都为true,而s1==s2、s1==s3都为false。
建议:尽量使用equals()方法,因为基本上我们比较的是变量值。

这样你应该理解了吧!!!