Значение "null" по умолчанию в строке - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть этот класс

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, и я знаю, что по по умолчанию эта переменная инициализируется в 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

}

И на самом деле код, в котором я проверяю строку, является частью приложения Android:

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

Если я проверюmAirline в (1) mAirline имеет его поля в null, но в (2) некоторые из них имеют значение «null» И мой метод для получения -

    public synchronized String getPhone() {
    return phone;
}

Ответы [ 6 ]

5 голосов
/ 06 сентября 2011

Нет, с кодом, который вы нам показали, вы не можете автоматически получить 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 голосов
/ 06 сентября 2011

Может быть, просто:

private String a = "null";
1 голос
/ 06 сентября 2011

Метод 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
1 голос
/ 06 сентября 2011

Почему бы вам просто не проверить, не является ли строка нулевой?

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

Вы также можете изменить метод получения, поэтому он возвращает значение по умолчанию, если поле не инициализировано:

public class Model {    
    private String a;

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

}
0 голосов
/ 06 сентября 2011

Это решит проблему для вас. Если переменная равна нулю, вы вернете «ноль», а если нет, то вернете значение.

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;
    }   
}
0 голосов
/ 06 сентября 2011

То есть вы имеете в виду, что значение a - это строка null, а не указатель со значением null? Этого никогда не произойдет, если вы не установите его таким образом, используя setA("null");.

Если вы хотите, чтобы a был инициализирован как ноль, напишите конструктор:

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