值“零”默认情况下,字符串
问题描述:
我有这个类值“零”默认情况下,字符串
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;
}
答
没有,用代码,你给我们,这是不可能的,你自动获得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
分别
答
也许只是:
private String a = "null";
答
所以你的意思,的a
值是字符串null
,而不是null值的指针?那永远不会发生,除非你使用setA("null");
来设置它。
如果你想a
被作为零初始化,写一个构造函数:
public Model() {
a = "null";
}
答
为什么你不只是检查,如果字符串不为空?
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;
}
}
答
如果参数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
答
这将解决这个问题为您服务。如果变量为空,则返回“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;
}
}
你不明白你在问什么,你发布的代码片段甚至没有编译,因为'a'没有定义。如果你没有明确设置'm.a'的值,它本身不会改变。 –
对不起,希望现在更清楚。 – Dayerman
除了你要重写m.getA()。equals(“null”)为“null”.equals(m.getA())的答案。 –