2013-03-13 119 views
0

我正在开发一个使用swing表来存储数据的eclipse中的定时器应用程序。 我遇到的主要问题是,如果if语句保持返回true,即使这些变量中的值相同(如输出所示)。什么可能导致这个?为什么如果语句返回真?

这是我的代码片断:

String currentPID = lblCurrentPID.getText(); 
for (int i = 0; i < tableActive.getRowCount(); i++) { 
    String currentValue = (String) tableActive.getValueAt(i, 2); 
    System.out.println(i + ": Current Value: " + currentValue + " - Current PID: "+ currentPID); 
    if (currentPID != currentValue) { 
     System.out.println("The value and PID are not the same for some reason!"); 
    } 
    else { 
     tableActive.setValueAt(ts1.getOverallTotalTime(), i, 3); 
     System.out.println(i + ": Row Was Changed!"); 
    } 
} 

这里是输出:

0:当前值:Test3的 - 当前PID:Test3的

值和PID是不一样的因为某些原因!

1:当前值:12345 - 当前PID:Test3的

价值和PID是不是出于某种原因一样!

2:当前值:54321 - 当前PID:Test3的

价值和PID是不是出于某种原因一样!

+1

尝试'!currentPID.equals(currentValue)'。 – OldCurmudgeon 2013-03-13 14:43:17

回答

4
if (currentPID != currentValue){ 

应该

if (!currentPID.equals(currentValue)){ 

使用equals()检查字符串平等。 ==运算符仅检查两个ref varibales是否引用同一个String对象。

+0

完整的脑屁,感谢大家的帮助! – Evidencex 2013-03-13 14:58:37

1

当你做String(或)Object比较,最好是使用equals()

if (!currentPID.equals(currentValue)){ 
+0

我不同意在所有情况下对所有对象使用equals总是更好。有时候,如果有人正在处理相同的实例或不同的实例,那么这很重要这就是为什么,例如,有一个IdentityHashMap。 – 2013-03-13 15:00:41

+0

@PatriciaShanahan:同意你的意见。更新答案,始终删除。 – kosa 2013-03-13 15:02:40

1

应该if (!currentPID.equals(currentValue))

相关问题