2011-09-06 173 views
-3

我有这个类值“零”默认情况下,字符串

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 

}

而事实上,我EVAL字符串是一个Android应用程序的一部分代码:

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

如果我在检查mAirline(1)mAirline有它在空字段,但在(2)有一些他们“空”而我的方法得到是

public synchronized String getPhone() { 
    return phone; 
} 
+1

你不明白你在问什么,你发布的代码片段甚至没有编译,因为'a'没有定义。如果你没有明确设置'm.a'的值,它本身不会改变。 –

+0

对不起,希望现在更清楚。 – Dayerman

+1

除了你要重写m.getA()。equals(“null”)为“null”.equals(m.getA())的答案。 –

回答

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分别

4

也许只是:

private String a = "null"; 
0

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

如果你想a被作为零初始化,写一个构造函数:

public Model() { 
    a = "null"; 
} 
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; 
    } 

} 
1

如果参数null或者参数本身String.valueOf()返回"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 
0

这将解决这个问题为您服务。如果变量为空,则返回“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; 
    } 
}