为什么我的代码中的字符串比较失败?

时间:2011-02-10 17:54:32

标签: java string comparison

我有一个数组,其中包含代表电缆尺寸(1,1.5,2.5等)的数字,存储为字符串。

在我的程序中,数组被加载到一个微调器中,它工作正常。 但是,当选择项目并将其存储在变量中时,我想检查选择了哪个字符串,并将另一个数字变量设置为2.5,以便稍后在程序中进行计算。

我尝试了以下内容:

if (conductorSize = "1" ) {conCsa = 1;}
else if (conductorSize = "1.5") {conCsa = 1.5;}

conductorSize是保存所选字符串的变量,conCsa是变量 设置为数值变量进行计算。

编译器说我无法将字符串转换为布尔值。发生了什么事?

5 个答案:

答案 0 :(得分:12)

如果您正在进行字符串比较,请使用.equals() 取自here的示例:

String s = "something", t = "maybe something else";
if (s == t)      // Legal, but usually WRONG.
if (s.equals(t)) // RIGHT <<<<<<<<<<<<< Use this.
if (s > t)    // ILLEGAL
if (s.compareTo(t) > 0) // CORRECT>

答案 1 :(得分:3)

正如Ed S.指出你正在使用赋值运算符。但是,由于您要比较String,因此需要使用equals方法。

if ("1".equals(conductorSize)) {conCsa = 1;}
else if ("1.5".equals(conductorSize)) {conCsa = 1.5;}

或者,您可以从float创建新的String

float conCsa;
try {
    conCsa = Float.parseFloat(conductorSize);
}catch(NumberFormatException e){
    conCsa = 0.0f; //set to a default value
}

答案 2 :(得分:0)

看起来你想要做的事情可能会更好地以这种方式表达:

conCsa = Double.parseDouble(conductorSize);

答案 3 :(得分:0)

通常,您需要使用.equals()方法。 如果性能非常重要并且您要与字符串文字进行比较,请查看String.intern()。它允许你进行超快==比较并避免像.equals()那样完整的逐字符扫描。 但是,为了证明这种非标准方法的合理性,性能必须非常非常重要。

答案 4 :(得分:0)

如果您的电缆尺寸是常量,则需要使用Enums,它可以帮助您减少条件比较时的数量。