检查Java中引用是否为null的最佳方法

检查Java中引用是否为null的最佳方法,java,Java,我想知道检查java中是否有有效引用的最佳方法是什么。我知道这种语法是有效的,但它是满嘴的 if (myObj == null) { // Do something knowing we have an object } 我来自其他一些语言,允许你检查C++中的指针。 char* prt = null; if (ptr) { // We know we have a valid c-string } java中是否有任何模棱两可或类似的语法?我可以使用编译器扩展或预处理器 之前跟进

我想知道检查java中是否有有效引用的最佳方法是什么。我知道这种语法是有效的,但它是满嘴的

if (myObj == null) {
  // Do something knowing we have an object
}
<>我来自其他一些语言,允许你检查C++中的指针。
char* prt = null;
if (ptr) {
  // We know we have a valid c-string 
}
java中是否有任何模棱两可或类似的语法?我可以使用编译器扩展或预处理器

之前跟进。在有人插嘴之前,我开始讨论为什么我应该使用java语法,因为你可能会忘记一个
=
符号,请不要

if (myObj = null) 

将被编译器/linter捕获。

唉,Java没有类似于
nullptr\t
的隐式转换或指向
bool
的指针类型,因此您必须使用更冗长的表示法

if(myObj==null)

在C++中,我们可以写< /P>
if(myObj)


在这方面,Java没有那么简洁,而且可以说更清晰。

唉,Java没有类似于
nullptr\t
的隐式转换,也没有指向
bool
的指针类型,因此您必须使用更冗长的表示法

if(myObj==null)

在C++中,我们可以写< /P>
if(myObj)


在这方面,Java没有那么简洁,而且可以说更清晰。

在Java中没有处理
null
检查的快捷语法,甚至在其他语言中也没有可用的null合并或null传播操作符。也没有用户定义的转换运算符,所以你不能使用C++习语来让你在返回对象的表达式上写循环,例如<代码>(CIN > x){}} /COD> < /P> 但是,Java8中存在一个强大的替代方法来避免所有的
null
检查:将可为null的对象包装进来,并使用其方法隐藏null检查

下面是一个简短的例子:

String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
String s=“你好”;
可选操作系统=可选的可用操作系统;
os.ifPresent(x->{System.out.println(x);});
上面的
“你好”
。如果将
s
设置为
null
,代码将不打印任何内容


Java中没有处理
null
检查的快捷语法,甚至在其他语言中也没有可用的null合并或null传播运算符。也没有用户定义的转换运算符,所以你不能使用C++习语来让你在返回对象的表达式上写循环,例如<代码>(CIN > x){}} /COD> < /P> 但是,Java8中存在一个强大的替代方法来避免所有的
null
检查:将可为null的对象包装进来,并使用其方法隐藏null检查

下面是一个简短的例子:

String s = "Hello";
Optional<String> os = Optional.ofNullable(s);
os.ifPresent(x -> { System.out.println(x); });
String s=“你好”;
可选操作系统=可选的可用操作系统;
os.ifPresent(x->{System.out.println(x);});
上面的
“你好”
。如果将
s
设置为
null
,代码将不打印任何内容

。。。是Java中的通用习惯用法。Java的设计者决定不允许将非布尔变量视为隐式的“truthy”值

另一个常见的习惯用法是在三元语句中使用
x==null

return x == null ? "not found" : x;
或者使用标准方法在null上尽早引发异常:

Objects.requireNonNull(x);

更一般地说,尝试采用一种编程风格,在这种风格中,您永远不会期望传递null,因此不必为这种可能性编写代码

在非公共API上,由于从不传递null,因此不需要测试null(如果发生
NullPointerException
异常,传递null的人可以自行负责)

在公共API中,对调用方来说,在传递非空值时验证非空值可能是一种礼貌,但这并不是在所有情况下都必需的

一个合理的目标是始终期望输入为非null,并且永远不返回null(因为Java 8,如果需要,使用
可选的
,或者采用默认值)

。。。是Java中的通用习惯用法。Java的设计者决定不允许将非布尔变量视为隐式的“truthy”值

另一个常见的习惯用法是在三元语句中使用
x==null

return x == null ? "not found" : x;
或者使用标准方法在null上尽早引发异常:

Objects.requireNonNull(x);

更一般地说,尝试采用一种编程风格,在这种风格中,您永远不会期望传递null,因此不必为这种可能性编写代码

在非公共API上,由于从不传递null,因此不需要测试null(如果发生
NullPointerException
异常,传递null的人可以自行负责)

在公共API中,对调用方来说,在传递非空值时验证非空值可能是一种礼貌,但这并不是在所有情况下都必需的


一个合理的目标是始终期望输入为非null,并且永远不返回null(因为Java 8,如果需要,请使用
可选的
,或者采用)。此外,还有相当多的值在其他语言中被视为“无效”。例如
0
false
。在Java中,您必须自己准确地定义什么是有效的。
null
是惯用的,便于阅读。C使用
0x0
的事实是IMO的实现细节。这将帮助您:@Basti
myObject.equals(null)
永远不能返回
true
——它将NPE。@slim“永远不能”->“永远不应该”。严重覆盖的
equals
方法可能允许
null
。例如,我看到一个JSON库(不记得是哪一个),它说JSON值
“null”
等于
null
。。。不幸的是,还有相当多的值在其他语言中被视为“无效”。例如
0
false
。在Java中,您必须自己准确地定义什么是有效的。
null
是惯用的