如果在以下代码中使用&替换&&,可能会出现什么问题

Shr*_*ari 2 java syntax null operators

在一次采访中,我的采访者问我:
如果用以下代码中的&替换&&,会出现什么问题:

String a=null; if (a!=null && a.length()>10) {...}
Run Code Online (Sandbox Code Playgroud)

kos*_*osa 15

&& 是逻辑AND运算符(执行短路行为,这意味着仅在需要时评估第二个操作数)

& 是按位AND运算符(按位&运算符执行按位AND运算).

因为没有短路行为,你会得到NullPointerException.


hmj*_*mjd 5

A NullPointerException将被抛出,因为&使用时没有短路,这意味着即使左手操作数的结果是,也总是评估右手操作数false.当&&使用右手操作数计算只有当左边的操作数是true.

15.22.2.布尔逻辑运算符&,^和| 15.23.Java语言规范中的条件和运算符&&描述了这种行为.