如果==比较Java中的引用,为什么使用这些字符串将其评估为true?

尤金:

如前所述,==运算符比较对象引用以检查它们是否引用堆上的同一对象。如果是这样,为什么我得到这段代码的“等于”?

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = "Str1";

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}
aioobe:

程序将打印Equal(至少使用Sun Hotspot和suns Javac。)此处在http://ideone.com/8UrRrk上进行了演示。

这是因为该字符串字面常量存储在一个事实串池和字符串的引用可以被重复使用。

进一步阅读:


但是:

public class Salmon {
    public static void main(String[] args) {

        String str1 = "Str1";
        String str2 = new String("Str1");

        if (str1 == str2) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
    }
}

Not equal由于new可以保证引入新的参考文献,因此将进行打印

因此,经验法则:始终使用该equals方法比较字符串

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果比较字符串总是通过。为什么?

如果Haskell始终将其评估为True,为什么会有isIEEE?

如果将字符串与整数进行比较,它会评估为假吗?

如果默认字符串为null,为什么不能使用String.Contains()?

如果我尝试将它与 $1、$2 等反向引用一起使用,则字符串在 RewriteRule 中重复 20 次。奇怪的。为什么?

如果语句字符串比较

如果条件用于比较Expect脚本中的字符串

如何在python中如果条件比较字符串?

比较字符串,如果在SQL Server 2008中为NULL

为什么这样做,如果VB.NET中的条件始终评估为true,而C#中的相同代码却不

如果期望,为什么不接受字符串类型?

如果字符串是向量,为什么它们是不可变的?

如果字符串linq中存在id,则将值设置为true

C# 如果字符串与使用 LINQ 的字符串列表中的任何字符串不同,则返回 true

Bash脚本,如果语句未正确评估字符串/浮点数比较(括弧式)

如果模板中的值为 None 则显示字符串

如果lisp中的字符串是向量,为什么不能使用svref访问第一个元素?

为什么此字符串的值为null,但是如果我检查是否为null,则结果为false?

如果“文本”小部件中的“字符串”发生更改,为什么不更改显示的文本?

如果字符串在.NET中是不可变的,那么为什么子字符串要花O(n)时间?

如果存在符号,为什么还要在哈希中使用字符串

如果不能保证字符串或整数的getHashCode()唯一,为什么要使用它?

如果可以轻松解码,为什么要使用 base64 编码字符串

如果我的字符串在C中的字符数为奇数,该如何使用填充?

字符串与字符串生成器。哪个更快?如果是 stringbuilder 那么为什么要使用 string

Mongodb:如果比较运算符起作用,为什么将字符串日期转换为ISOdate?

如何使用.any?ruby中的方法,如果数组中有字符串,则返回true

字符串输入,如果

如果它们都是引用类型,为什么将字符串传递给方法的行为与 List<object> 不同?