проверка нуля, если оператор не работает в java - PullRequest
0 голосов
/ 20 апреля 2020

я хочу проверить, что экземпляр объекта является нулевым в java, когда я нажимаю клавишу ввода, у меня есть класс с конструктором, и я передаю параметр

private String codigo;
    private String nombre;
    private String descripcion;
    private String foto;
    private String stock;

public Producto(String codigo) {
   this.codigo = codigo;
        this.nombre = nombre;
        this.descripcion = descripcion;
}
/*then getters and setters


*/


//this is in a java form 
private void txtCodigoProductoActionPerformed(java.awt.event.ActionEvent evt) { 
Producto producto = new Producto(txtCodigoProducto.getText());
System.out.println(producto);


if (producto==null) {
            JOptionPane.showMessageDialog(this, "No existe este producto");

        }else{
            lbl1.setText(producto.getNombre());
            lbl2.setText(producto.getDescripcion());
         }

}

System.out.println (producto) показывает нулевое значение, когда я нажимаю клавишу ввода, поскольку я написал неправильное число, поэтому все атрибуты producto равны нулю, но почему он не проверяет, является ли оно пустым, и не отображает диалоговое окно сообщения? Я изменяю условие на один из атрибутов, поскольку все они имеют значение null:

if (producto.getStock()==null) {
            JOptionPane.showMessageDialog(this, "No existe este producto");

        }else{
            lbl1.setText(producto.getNombre());
            lbl2.setText(producto.getDescripcion());
         }
}

, и это сработало и показало мне messageDialog, так почему producto == null не работает?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

В Java переменная типа объекта, такая как producto в вашем примере, может либо ссылаться на объект, либо быть нулевой. Если вы установите его для объекта, как вы сделали, когда писали producto = new Producto(txtCodigoProducto.getText());, тогда он больше не является нулевым.

Внутри объекта могут быть другие переменные, называемые полями. Каждый из них (если он имеет тип объекта) также может ссылаться на объект или быть нулевым. Объект, который вы создали с помощью new Producto(txtCodigoProducto.getText());, имеет пять переменных внутри. Тот, который называется codigo относится к объекту. Остальные четыре являются нулевыми.

Проверка if (producto.getStock()==null) будет работать только в том случае, если producto относится к объекту. Он (предположительно) запрашивает у этого объекта значение его поля stock, а затем проверяет, является ли это значение нулевым или относится к объекту.

Это совершенно другая проверка по сравнению с if(producto == null), которая проверяет только сама переменная producto.

1 голос
/ 20 апреля 2020

Producto producto = new Producto(...); абсолютно гарантирует , что producto не null. System.out.println(producto) поэтому вызывает producto.toString().

Это toString() реализация Producto, которая возвращает null или текст "null".

if (producto == null) - бессмысленное утверждение, поскольку producto не может быть null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...