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指的就一定是一个地址么?
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指的就一定是一个地址么?
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)
按照那个帖子的说明,我的运行结果应该是a!=b。
可是我运行完的结果是a==b,我就弄不明白了。和那个帖子上说的完全相反阿。
您可以运行试试。
String a="java";
String b="java";
-----------------
String a=new String("java");
String b=new String("java");
------------------
是不等价的?
常常看到书上说是等价的?
正如楼上说的如果:
String a=new String("java"); String b=new String("java");
那么你是声名了两个对象a和b,地址不同,所以a==b 为false
对于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()方法,因为基本上我们比较的是变量值。这样你应该理解了吧!!!