Java 输出和解释是什么?

Java 输出和解释是什么?,java,Java,下面的代码返回布尔值false。对此有何解释 String str = "Bee"; String str2 = "Bee"; System.out.println("==" + str == str2); 实际结果:falsestr和str2都被分配给同一个字符串实例,因为字符串文本会自动存储在字符串池中。因此str==str2是真的 但是,您正在打印表达式==+str==str2。该表达式从左到右求值,所以第一个==+str求值,结果为字符串==Bee。然后将==运算符应用于==Bee和

下面的代码返回布尔值false。对此有何解释

String str = "Bee";
String str2 = "Bee";
System.out.println("==" + str == str2); 
实际结果:false

str和str2都被分配给同一个字符串实例,因为字符串文本会自动存储在字符串池中。因此str==str2是真的

但是,您正在打印表达式==+str==str2。该表达式从左到右求值,所以第一个==+str求值,结果为字符串==Bee。然后将==运算符应用于==Bee和Bee,这将返回false

如果将语句更改为:

System.out.println("==" + (str == str2)); 
您将得到true,因为现在比较将在字符串连接之前进行。

使用equals来比较字符串,对于这种情况,它将返回true

==运算符比较字符串是否是完全相同的对象


理论上,这可能发生在内部化字符串的情况下,但您不能依赖于此。对于您的情况,比较字符串值时,请使用str.equalsstr2。

是的,这很奇怪。我也不明白为什么==Bee和Bee不是同一个字符串。但是使用==来比较字符串是一种不好的做法。虽然一般来说,您是对的,但这本身并不是问题所在。