当我按 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/