Java是否像JavaScript一样有默认值返回?

4
我在想Java是否有“默认值分配”(我真的不知道该怎么称呼它),就像您可以在JavaScript或Python中做的那样。
例如,在JavaScript中,您可以这样做:
var myVar = variable || "default value";

如果变量包含一个值,那么myVar将具有该变量的值,否则myVar将是字符串"default value"。
在Python中也可以这样做:
a = "hello" 
b = a or "good bye" 
print b #this will print "hello" 
a = None
b = a or "good bye" 
print b #this will print "good bye"

你能将这段话翻译成中文吗?“你能用Java做类似的东西吗?通常当我在Java中必须做这个时,我会像这样做:”
String a = b != null ? b : "default value";

但是我认为你可以在 JavaScript 或 Python 中做的更容易理解。还能告诉我这个东西叫什么吗?我知道 || 符号是一个或运算符,但是当你使用 "defaultvalue" 时它被称为什么呢?谢谢。

3
在你的问题中提供的示例代码是在Java中实现此操作的方式。为了清晰起见,建议添加括号以使其读作 String a = ((b != null) ? b : "默认值") - Krease
Java不会像Javascript一样检查变量的真实性。 - Elliott Frisch
相关:在C#中,您可以使用null-coalescing运算符??来实现此操作。请参见:是否有Java等效的null-coalescing运算符在C#中? - Luke Willis
2
@Tichodroma 试过什么?尝试使用其他编程语言中具有默认值语法的语法?“你试过了吗”是对那些问“我做X会发生什么”的人的一个好回答,但对于“Java是否具有类似于编程语言Y的功能X的功能”则不太适用。 - Solomon Slow
@Chris 是的,括号很有用,但不幸的是它不如Python易读。 - agmezr
显示剩余2条评论
5个回答

8
由于Java相对于JavaScript或Python更加静态类型,我恐怕不能这样做。考虑以下示例:
myVar = variable || "default value";

为了能够在Java中执行此操作,variable"default value"必须是Boolean,因为它们被用在布尔逻辑条件运算符中。而结果myVar)也将是Boolean
由于Java中的类型必须更具静态明确性,因此需要定义完整的比较表达式:
myVar = (variable != null) ? variable : "default value";

在这种情况下,布尔表达式是被检查的条件,variable"default value"需要是相同类型。这也将是myVar的结果类型。
在JavaScript中(以及我使用过的几乎任何动态类型系统中),几乎任何东西都可以作为布尔值进行检查。(任何东西都可以是“真实”的。)然而,在Java或C#等静态类型语言中,通常不是这种情况。

4
不,Java中的方法返回类型没有默认值。
在普通的Java中,你可以写出类似以下代码:
if (value != null) {
  return value;
else {
  return "default";
}

或者你可以简化为
return value != null ? value : "default";

在Java8中,有可能使用Optional<T>。这意味着你可以保存一个值或者不保存。代码如下:

Optional<String> optionalVal = Optional.ofNullable(null); // or Optional.of("Foo");
return optionalVal.getOrElse("default");

1

在Java中没有类似的表达式(除了你已经描述过的三目运算符)。

在某些脚本语言中,如JS、Python和Lua,andor操作将返回最后一个考虑的值(对于or,第一个真值或最后一个假值,对于and,第一个假值或最后一个真值),而不是布尔值,这就是为什么 var myvar = param || "default" 技巧能够起作用的原因。

然而,在Java中,&&||运算符只适用于布尔值,因此上述行为不适用。


1
这个技巧在 JavaScript 和 Python 中有效的原因是 || 可以应用于非布尔值,并根据它们的真实性返回其中一个参数。在 Java 中,|| 只能应用于布尔值,这意味着这个技巧不起作用。

0
String a = b != null ? b : "default value";

这是一个简写形式:

if(b != null) a = b;
else a = "default value";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接