簡體   English   中英

字符串比較意外輸出

[英]String comparison unexpected output

在下面的程序中,我得到的輸出false 。但是據我的理解,當我們添加兩個臨時參考變量時,結果進入常量池內,不允許重復,因此我們必須在此處獲得正確的輸出,但我們得到的輸出卻為false有人能解釋一下我的原因嗎?

package com.lara;

public class Man9 
{
    public static void main(String[] args) 
    {
        String s1 = "ja";
        String s2 = "va";
        String s3 = "ja".concat("va");
        String s4 = "java";
        System.out.println(s3==s4);
    }
}

您對字符串連接的理解不正確。

默認情況下,只有字符串常量被保留。 現在,字符串常量不僅是字符串文字,還可以使用+運算符將其他常量串聯起來,例如

String x = "hello";
String y = "hel" + "lo";
// x == y, as the concatenation has been performed at compile-time

但是,在您的情況下,您正在進行方法調用-這不是Java語言規范在確定常量字符串表達式時考慮的一部分。

關於什么是“常量”,請參見JLS的15.28節

您需要使用s3.equals(s4),而不是s3 == s4。

然后,您將獲得真實的結果。

見下面的成績單

C:\temp>java foo
false
true

C:\temp>type foo.java
public class foo
{
    public static void main(String[] args)
    {
        String s1 = "ja";
        String s2 = "va";
        String s3 = "ja".concat("va");
        String s4 = "java";
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM