java - null 检查语句是否在 java 中不起作用

标签 java if-statement null conditional-statements

当我按 Enter 键时,我想检查 java 中的实例对象是否为 null,我有一个带有构造函数的类,并且传递了一个参数

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());
         }

}

当我按 Enter 键时,System.out.println(producto) 显示 null,因为我写了一个不正确的数字,因此 Producto 的所有属性都为 null,但为什么它不检查是否为 null 并且不向我显示消息对话框? 我将条件更改为其中一个属性,因为它们全部为空:

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

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

它成功了并向我显示了 messageDialog,那么为什么 Producto == null 不起作用呢?

最佳答案

在 Java 中,对象类型的变量(例如示例中的 producto)可以引用对象,也可以为 null。如果您将其设置为一个对象,就像您编写 producto = new Producto(txtCodigoProducto.getText()); 时所做的那样,那么它就不再为 null。

对象内部可以有其他变量,称为字段。其中每一个(如果它具有对象类型)也可以引用一个对象,或者为 null。您使用 new Producto(txtCodigoProducto.getText()); 创建的对象内部有五个变量。名为 codigo 的对象指的是一个对象。其他四个为空。

检查 if (producto.getStock()==null) 仅当 producto 引用一个对象时才有效。它(大概)询问该对象其 stock 字段的值,然后检查该值是否为 null,或引用一个对象。

这是与 if(producto == null) 完全不同的检查,后者仅检查 producto 变量本身。

关于java - null 检查语句是否在 java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61313946/

相关文章:

java - Eclipse 规范的命令行选项列表

java - Android 设备监视器 JVM 终止退出代码 2

javascript - 检查字符串中字符的 ASCII 码值是否大于或小于前一个字符的 ASCII 码值 - JavaScript

MySQL - IF 查询 STR_TO_DATE

c# - 将空的 Textbox.Text 读取为 ""、null 或 String.Empty?

java - 取一个java小程序的 "screenshot"

sqlite - sqlite触发器中的条件插入语句

php - Javascript 的未定义的 PHP 等价物是什么?

c# - 如何从 Dapper 查询而不是 default(T) 返回 null?

java - 使用 JExcel API 更改 XLS 文件的格式