比较字符串Java

时间:2011-01-14 22:07:30

标签: java

我正在尝试将字符串与字符串值进行比较。看起来相当简单,但比较返回null。我想要的只是输出匹配的值并忽略null返回。但输出也显示空值。我已经以各种方式尝试过这种方法,但它会一直显示空值。

   class ActionMovie extends cdinventoryprogram {

    private String Atitle;
    private double Avalue;
    private double Rstock;
    private String Ctitle;

    public ActionMovie(String title, int itemNumber, int numberofUnits, double unitPrice ){
        Atitle = title;
        Avalue = numberofUnits * unitPrice;
        Rstock = unitPrice * .05;}

    public String getActionTitle(){

        if (Atitle.equals("Matrix")){
        Ctitle = Atitle;
        }else if (!Atitle.equals("Matrix")){

        }
        return Ctitle;
    }

}

public class cdinventoryprogram {

public static void main(String[] args) {

        ActionMovie myAction[] = new ActionMovie[DEFAULT_LENGTH];

        myAction[0] = new ActionMovie ("The Illusionist", 1, 5, 15.99);
        myAction[1] = new ActionMovie ("Matrix", 2, 3, 14.99);
        myAction[2] = new ActionMovie ("Old School", 3, 6, 12.99);

            for ( ActionMovie currentActionMovie : myAction ){
            CAction = currentActionMovie.getActionTitle();
            JOptionPane.showMessageDialog( null, "Your action movie is: " + CAction);

}} }

5 个答案:

答案 0 :(得分:2)

变化:

private String Ctitle;

要:

private String Ctitle = ""

答案 1 :(得分:2)

所以你想要返回一个空字符串而不是null?然后就这样做。

if (Atitle.equals("Matrix")){
    Ctitle = Atitle;
} else {
    Ctitle = "";
}
return Ctitle;

请注意,第二个if非常多余,因此我也将其删除了

NullPointerException实际为Atitle时,请注意潜在的null。为防止这种情况发生,您希望按照以下方式执行此操作,因为"Matrix"永远不会null

if ("Matrix".equals(Atitle)){
    Ctitle = Atitle;
} else {
    Ctitle = "";
}
return Ctitle;

与此问题无关,我建议您完成标准Java naming conventions。类名应该以小写的大写和变量名开头。这样,代码对于每个其他Java开发人员(包括将来的自己)都具有更好的可读性。


根据评论

更新

  

不,如果字符串不匹配,我不想返回任何内容。如果不相等则返回一个值。 - user569127 3分钟前

然后返回null。这只会将问题转移到显示值。如果是null,则只是不显示它。例如。

if (CAction != null) {
    JOptionPane.showMessageDialog(null, "Your action movie is: " + CAction);
}

这个问题的混乱可能是由于你对“返回”和“显示”这两个词的混淆造成的。

答案 2 :(得分:0)

如果Atitle不等于Matrix,则Ctitle将始终为null。设置Ctitle的默认值,使其永远不会返回null。

答案 3 :(得分:0)

问题是您的成员变量CTitle已初始化(默认情况下)为null,而您的getActionTitle()方法只会更新其值,如果它等于字符串“Matrix”(否则它的价值没有变化)。因此该方法将返回其默认值(null),其打印为字符串“null”。

如果您不希望在某处打印返回值时看到“null”,那么您应该检查null并相应地执行操作,或者将CTitle的默认值更改为,例如,空字符串("")。

答案 4 :(得分:0)

你确定Atitle正确设置并且它在某一点上等于“Matrix”吗?我建议在代码中设置一个断点,以便在它碰到比较之前检查Atitle的值。您也可以在构造函数中初始化Ctitle。