我有这个班级
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;
}
答案 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;
}
}