Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时使用';java.util.Objects.';?_Java_Oop_Java 7 - Fatal编程技术网

何时使用';java.util.Objects.';?

何时使用';java.util.Objects.';?,java,oop,java-7,Java,Oop,Java 7,我正在浏览专题,他们谈论课堂 我不明白的是,它们之间的功能区别是什么 java.util.Objects.toString(foo) vs foo == null ? "":foo.toString() 我所能看到的是一个空检查和函数表示法,而不是样式 我遗漏了什么?调用只需省去对空检查的记忆,这意味着您可以直接在方法返回值(例如Objects.toString(getPossibleNullObject()))上使用它,而无需先将其存储在变量中(或调用该方法两次) 但是请注意,该方法实际上返

我正在浏览专题,他们谈论课堂

我不明白的是,它们之间的功能区别是什么

java.util.Objects.toString(foo)
vs
foo == null ? "":foo.toString()
我所能看到的是一个空检查和函数表示法,而不是样式

我遗漏了什么?

调用只需省去对空检查的记忆,这意味着您可以直接在方法返回值(例如
Objects.toString(getPossibleNullObject())
)上使用它,而无需先将其存储在变量中(或调用该方法两次)

但是请注意,该方法实际上返回:

对非null参数调用
toString
,对
null
参数调用
null
的结果

所以它实际上相当于:

foo == null ? "null" : foo.toString();
如果要将
用于null值,可以使用传递
null default
返回值的重载,其主要优点是可以轻松地将其用于可能为null的返回值,而无需创建新的局部变量(或者更糟糕的是调用函数两次)

比较

Foo f = getFoo();
String foo = (f==null) ? "null" : f.toString();
或是卑躬屈膝、令人讨厌的人

String foo = (getFoo()==null) ? "null" : getFoo().toString()
到基于
对象的.toString
版本

String foo = Objects.toString(getFoo());

为什么一定要有功能上的差异?更清晰的表示法本身不是一种好处吗?实际的问题是,既然Java 1.0已经有了
String.valueOf
,而Java 1.0也有同样的功能(
Objects.toString
只是调用它),为什么要引入这种方法呢。