String中默认值为“null”

时间:2011-09-06 09:10:51

标签: java string null

我有这个班级

public class Model {    
    private String a;
    private String b;

    public synchronized String getA() {
        return a;
    }
    public synchronized void setA(String a) {
        this.a = a;
    }
    public synchronized String getB() {
        return b;
    }
    public synchronized void setB(String b) {
        this.b = b;
    }   
}

我尝试获取a的值,我知道default此变量初始化为null。但是,如果我调用getA()方法,之后该变量是否可能包含字符串"null"(不是null而是String)?所以a.equals("null") == true

public static void main(String[] args) throws ParseException {      
Model m = new Model();
String test = m.getA();
m.getA().equals("null");//No Exception occurs

}

事实上,我评估String的代码是Android应用程序的一部分:

    mAirline = (Airline) extras.getSerializable("airline");     
    @SuppressWarnings("unused")
    String test = mAirline.getPhone(); //(1)
    String test2 = mAirline.getHref(); //(2)

如果我检查mAirline in(1)mAirline的字段为null,但在(2)中有一些为“null”而我的get方法是

    public synchronized String getPhone() {
    return phone;
}

6 个答案:

答案 0 :(得分:5)

不,使用您向我们展示的代码,您无法自动获得String "null"

但请注意,某些方法null转换为"null"。最值得注意的例子是PrintWriter.println()(如System.out.println())和String.valueOf()

System.out.println(null);
System.out.println("null".equals(String.valueOf(null)));

这些行将分别打印null(即4个字符)和true

答案 1 :(得分:4)

也许只是:

private String a = "null";

答案 2 :(得分:1)

为什么不检查字符串是否为空?

Model m = new Model();
String test = m.getA();
if(test==null) {
  //is null
} else {
  //is not null
}

您也可以更改getter方法,如果该字段未初始化,则返回默认值:

public class Model {    
    private String a;

    public synchronized String getA() {
        //if a is null, return "null", else return a
        return a==null?"null":a;
    }

}

答案 3 :(得分:1)

如果参数为String.valueOf(),方法"null"将返回null,如果它是与null不同的字符串,则返回参数本身。

    Model m = new Model();
    String test = m.getA();
    if (String.valueOf(a).equals("null")) //No Exception occurs

但这有点神秘,很难理解你想做什么 直接检查null,更容易阅读:

    Model m = new Model();
    String test = m.getA();
    if (a == null || a.equals("null")) //No Exception occurs

答案 4 :(得分:0)

你的意思是,a的值是字符串null,而不是值为null的指针?除非你使用setA("null");设置它,否则永远不会发生。

如果要将a初始化为null,请编写构造函数:

public Model() {
    a = "null";
}

答案 5 :(得分:0)

这将为您解决问题。如果变量为null,则返回“null”,如果不是,则返回值。

public class Model {    
    private String a;
    private String b;

    public synchronized String getA() {
        return (if (a ==null) ? "null" : a);
    }
    public synchronized void setA(String a) {
        this.a = a;
    }
    public synchronized String getB() {
        return (if (b ==null) ? "null" : b);
    }
    public synchronized void setB(String b) {
        this.b = b;
    }   
}