字符串'=='和字符串池行为

时间:2013-10-17 06:01:15

标签: java string

我的问题很简单。是什么区别 -

s3=s1+s2s3="string"

我认为我很难解释它。

我理解==.equals()之间的区别。

5 个答案:

答案 0 :(得分:3)

当发生2个对象的连接时,将创建一个新的String对象。但是如果你连接2个字符串文字,那么就不会创建一个新对象。

String s3=s1+s2; // new object created
System.out.println(s3=="string"); // false

String s4="str"+"ing"; // this will not create a new string object
System.out.println(s4=="string"); // true

当编译器遇到String s4="str"+"ing";时,编译器对编译时常量进行常量折叠并将其放入一个字符串中,因为连接本身就发生在编译时,因此完成的字符串会进入恒定的游泳池。

答案 1 :(得分:2)

==运算符检查对象的引用是否相等。

equals()方法检查对象的值是否相等。

要比较字符串,请使用equals

System.out.println(s3.equals("string"));

答案 2 :(得分:1)

s3是一个新的String对象,是s1s2

的串联

==会比较他们的内存地址。不是他们的文字价值。使用.equals()

答案 3 :(得分:1)

  

函数==检查to的对象是否相同。

     

此处内容相同但对象不相同。

查看Here了解==和.equals

之间的区别

答案 4 :(得分:0)

==用于原始类型。在对象上,您应该使用compare或equals。字符串以特定的方式处理。因为字符串上的==不能很好地工作,因为它们由jvm连接起来。它只需要对字符串的引用,==检查内存位置。