Java中的字符串拼接问题?
Stringstring1="1";Stringstring2="2";Stringstring3=string1+string2;System.out.println(...
String string1 = "1";
String string2 = "2";
String string3 = string1 + string2;
System.out.println(string3 == string1 + string2);
结果为false,为什么?
还有,字符串拼接之后会生成新的对象,应该是在String Pool中生成吧?? 展开
String string2 = "2";
String string3 = string1 + string2;
System.out.println(string3 == string1 + string2);
结果为false,为什么?
还有,字符串拼接之后会生成新的对象,应该是在String Pool中生成吧?? 展开
6个回答
展开全部
①: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中生成的。
全部自己打的噢。
分析一下:
你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中生成的。
全部自己打的噢。
展开全部
可以这么理解,字符串有两种存在方式,一种是常量池(栈)里的存在,还一种是堆里的存在,具体存在于哪里可以根据赋值判断一下,如果等号右侧存在变量则在堆里,全常量则在栈里,所以,string1,string2都在栈里,而string3右侧的string1是变量,所以会存在于堆里,string3 == string1 + string2判断的是堆里的两个字符串,false是必然的,这和new String("1") == new String("1")等同,如果,string1,string2都添加final修饰符,那么string3也会存在于栈里,此时就是true
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string1 + string2这个玩意是你拼出来的,在内存中是不会分配地址的,因为他不属于任何一个对象,所以输出false!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
System.out.println(string3 == string1 + string2);
string3 == (string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象是不是同一个对象
string3.equals(string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象,俩个对象的值是不是相等。
俩种写法都没有错,但使用的时候要注意你自己需要做的是什么!
string3 == (string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象是不是同一个对象
string3.equals(string1 + string2)是判断string3这个对象与string1 + string2之后形成的对象,俩个对象的值是不是相等。
俩种写法都没有错,但使用的时候要注意你自己需要做的是什么!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你还没弄清楚==和equals方法的区别啊,,==是判断是不是同一个对象,而equals方法才是判断两个对象的值是不是一样,
你加上System.out.print(string3.equals(string1+string2))就知道了
你加上System.out.print(string3.equals(string1+string2))就知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询