簡體   English   中英

與數字連接時,Java字符串比較不起作用

[英]Java string comparison is not working when concatenated with number

我對java人的問題是,當我比較兩個字符串時

imageName=new String[20];    
....    
imageName[1]="img1";  
imageName[2]="img1";  

if(imageName[1]==imageName[2])  
{  
 ////  codes  
}

它工作得很好,但是當我通過數字串聯制作字符串時它不起作用

imageName=new String[20];  
int j=1,k=1;  
imageName[1]="img"+j;  
imageName[2]="img"+k;

 if(imageName[1].toString()==imageName[2].toString())     
        {  
           ////  codes  
        }  

雖然j和k的值是相同的,但它不起作用

在此先感謝您的解決方案

比較兩個字符串時應該使用String.equals

if (imageName[1].equals(imageName[2])

您不應該將字符串與==進行比較,而應使用.equals方法: imageName[1].equals(imageName[2])

==比較指針是否相等,所以如果兩個變量都代表內存中完全相同的實例,那么它就是true 在第一種情況下,情況就是這樣,因為Java會將字符串文字用於性能。 但在第二種情況下,您將獲得兩個不同的堆分配對象,盡管它們的內容相同,但仍然是兩個不同的對象。

您正在比較兩個String是否完全相同的對象。

你想要的是比較他們的內容。 我建議你改用.equals

永遠不要使用“==”來比較Java中的字符串。 使用equals()方法。 ==運算符檢查兩個String變量是否指向內存中的相同位置,而equals()方法檢查兩個單獨的String對象是否包含相同的字符。 這是第二個定義在這里有意義:你的String連接是創建單獨的String對象,但我們仍然希望將它們視為“相等”。

The correct way to compare strings is using equals() method

所以,請更改您的代碼如下,

if (imageName[1].equals(imageName[2])

並且請在發布之前考慮在SO中進行研究,因為之前已經多次回答了這樣的問題。

要比較兩個String ,最好使用equals()方法


 if(imageName[1].equals(imageName[2]))
{
//// codes
}

==是參考比較。 也就是說,您確定這兩個對象實際上是否是同一個對象。 如果你使用equals()然后該方法比較字符串的內容,即這些對象具有相同的內容(你會理解這里有一個細微的差別)

你的第一個場景是有效的,因為編譯器足夠聰明,可以意識到你有兩次相同的字符串。 即它看:

imageName[1]="img1";  
imageName[2]="img1"; 

並確定您的數組元素可以指向同一個對象。 在你的第二個場景中,這已不再適用。

imageName[1]="img"+j;  
imageName[2]="img"+k;

編譯器無法可靠地確定這些可能是相同的字符串對象(也非常正確)。

所以(一般來說)你應該使用equals()來比較Strings 你可以使用引用相等(它更快,因為它比較引用而不是字符串內容),但你必須絕對確定你在做什么(也許你正在使用String.intern() - 但是有缺點那里)

暫無
暫無

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

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