Java中的字符串拼接问题?

String string1 = "1";
String string2 = "2";
String string3 = string1 + string2;
System.out.println(string3 == string1 + string2);
结果为false,为什么?

还有,字符串拼接之后会生成新的对象,应该是在String Pool中生成吧??

①:java中有基本数据类型和对象之分的。对于基本数据类型 ,比如int 等采用==比较是直接比较值。而你这个String是字符串对象,若是用==进行比较其实是比较对象在内存中存放的物理地址。
分析一下:
你string1指向的是一个对象,string2指向的是另一个对象,string3是string和string2的连接,又重新创建一个对象,即string3指向的又是另外一个对象。
==是比较对象在内存中存放的物理地址。String1地址=String2地址+String3地址.结果是false。
String对象有一个equals方法,是来比较对象实际内容的。"12".equals("1"+"2").结果是true。
像楼上讲的改成System.out.print(string3.equals(string1+string2))就输出true了。
②:新的String对象是在jvm的Sting Pool中生成的。

全部自己打的噢。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-08
可以这么理解,字符串有两种存在方式,一种是常量池(栈)里的存在,还一种是堆里的存在,具体存在于哪里可以根据赋值判断一下,如果等号右侧存在变量则在堆里,全常量则在栈里,所以,string1,string2都在栈里,而string3右侧的string1是变量,所以会存在于堆里,string3 == string1 + string2判断的是堆里的两个字符串,false是必然的,这和new String("1") == new String("1")等同,如果,string1,string2都添加final修饰符,那么string3也会存在于栈里,此时就是true
第2个回答  2011-10-07
string1 + string2这个玩意是你拼出来的,在内存中是不会分配地址的,因为他不属于任何一个对象,所以输出false!
第3个回答  2011-10-05
System.out.println(string3 == string1 + string2);
string3 == (string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象是不是同一个对象
string3.equals(string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象,俩个对象的值是不是相等。
俩种写法都没有错,但使用的时候要注意你自己需要做的是什么!
第4个回答  2011-10-02
你还没弄清楚==和equals方法的区别啊,,==是判断是不是同一个对象,而equals方法才是判断两个对象的值是不是一样,
你加上System.out.print(string3.equals(string1+string2))就知道了
相似回答