为什么优化功能不会出现在下两个println?

时间:2013-11-17 16:55:59

标签: java string

public static void main(String[] args) {
        String str1 = "UNI:5";
        String str2 = "UNI:" + 5;
        String str3 = "UNI:" + str1.length();
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str1 == new String(str1));
    }


我们得到:



它应该是“虚假虚假”的东西!

2 个答案:

答案 0 :(得分:2)

String str1 = "UNI:5";
String str2 = "UNI:" + 5;

这些字符串在编译时完全相同(不涉及未知变量),因此它们将被视为字符串池中的相同值。

由于==检查它们的引用,它将返回true,因为它们指向相同的条目。

如果您要引入随机功能,它将返回false,因为无法保证这些功能相同

String str1 = "UNI:5";
String str2 = "UNI:" + getSomething();

private int getSomething() {
   return new Random().nextDouble() > 0.5 ? 1 : 5;
}

答案 1 :(得分:0)

请记住==通过引用进行比较。由于两个第一个字符串相等,编译器会将它们优化为同一个实例。

要正确比较字符串,请使用equals()方法。