Java if语句的简写形式

293

我知道有一种用简短形式编写Java if语句的方法。

if (city.getName() != null) {
    name = city.getName();
} else {
    name="N/A";
}

有人知道如何将上述5行代码写成一行短格式吗?


13
Java 中的三元运算符Java 中的三元运算符也称为条件运算符。它是一种简洁的 if-else 语句的替代方式。它由三部分组成:一个布尔表达式,一个问号 (?) 和两个表达式(真和假)。如果布尔表达式为 true,则执行真表达式;否则执行假表达式。语法如下:variable x = (boolean expression) ? value if true : value if false;例如,以下代码将比较两个数字并返回其中最大的数字:int a = 5; int b = 10; int max = (a > b) ? a : b; System.out.println(max); // 输出 10在这个例子中,布尔表达式 a > b 为 false,因此执行 b 的值,即 max 被赋值为 10。使用三元运算符可以使代码更加简洁,但过度使用也会降低代码的可读性。 - CoolBeans
3
我猜你把if逻辑搞反了。 - NPE
8
如果(city.getName()!=null){name = city.getName();} else {name="N/A"} - Steve Kuo
12
@SteveKuo 你可以删掉三个空格。 ;) - Peter Lawrey
2
if (city.getName()!= null) name = city.getName(); else name="N/A"; - Anton Dozortsev
17个回答

561

使用三元运算符:

name = ((city.getName() == null) ? "N/A" : city.getName());
我认为你的条件反了 - 如果它是null,你想让值为"N/A"。
如果城市是null呢?在这种情况下,你的代码会出问题。我建议再加一个检查:
name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());

16
+1,虽然你有多余的括号。我会这样写:`name = city.getName() == null ? "N/A" : city.getName();` - Andres F.
29
风格和喜好的问题:我喜欢让布尔子句的分组清晰可见。 - duffymo
6
没问题 - 我使用了德摩根定理并得到了你需要的结果。不需要编辑,只要你能正确地表达逻辑即可。 - duffymo
3
FYI,外层括号是不必要的。您可以这样写:name = city.getName()==null ? "N/A" : city.getName(),如果城市名称为null,则将名称设置为“N/A”。 - Steve Kuo
4
如果city == null,那么String cityName = city.getName();会抛出NullPointerException异常吗?因此,我认为你的中间解决方案绝对是最好的(顺便说一下,我赞成使用“不必要”的括号!人们需要记住,99%的编程是与其他人(以及你未来的自己)交流,而不是与编译器交流 - 否则我们就会使用c!) - Alex
显示剩余5条评论

48
为了避免调用两次 .getName(),我会使用:
name = city.getName();
if (name == null) name = "N/A";

2
在一个可变城市的多用户系统中,可能会发生介入性的 city.setName(null)。你的答案能够妥善处理这种情况。 - emory

35

Java中的三元运算符

在Java中,您可能会写:

if (a > b) {
  max = a;
}
else {
  max = b;
}

根据单个条件将单个变量设置为两种状态,是使用if-else的常见用法之一,因此为此设计了一种简便方法,即条件运算符? :。使用条件运算符,您可以像这样在一行中重写上面的示例:

max = (a > b) ? a : b;

(a > b) ? a : b;是一个表达式,它返回两个值中的一个,即a或b。条件(a > b)会被测试。如果条件为真,则返回第一个值a。如果条件为假,则返回第二个值b。返回的值取决于条件测试a > b,而条件可以是任何返回布尔值的表达式。


35
用三元运算符实现该功能。
name = city.getName() == null ? city.getName() : "N/A"

不过,我认为你在上面的代码中有一个打字错误,你的意思是:

if (city.getName() != null) ...

33

我总是忘记如何使用 ?: 三元运算符。这个附加答案是一个快速提醒。它是 if-then-else 的简写形式。

myVariable = (testCondition) ? someValue : anotherValue;

含义

  • ()代表if
  • ?代表then
  • :代表else

与以下表达式相同

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}

26

1. 您可以删除括号换行符

if (city.getName() != null) name = city.getName(); else name = "N/A";

2. 您可以在Java中使用?:操作符。

语法:

Variable = Condition ? BlockTrue : BlockElse;

所以在你的代码中,你可以这样做:
name = city.getName() == null ? "N/A" : city.getName();

3. 布尔值分配条件结果

boolean hasName = city.getName() != null;

额外信息:好奇的人看

在一些基于JAVA的语言中,比如Groovy,你可以使用这种语法:

name = city.getName() ?: "N/A";

运算符?:将分配从我们请求的变量返回的值。在这种情况下,如果city.getName()不是null,则分配其值。

23

在Java 8中:

name = Optional.ofNullable(city.getName()).orElse("N/A")

11
name = (city.getName() != null) ? city.getName() : "N/A";

11

您可以以简短的形式编写if,else if,else语句。例如:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean)
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";      

这是简化版:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}

1
这个问题并没有被问到,所以仍然是-1。 - Makky

7
这里有一行代码。
name = (city.getName() != null) ? city.getName() : "N/A";

以下是演示工作原理的示例,请在JS文件中运行下面的代码并了解结果。这个条件 ("Data" != null) 就像我们在普通的 if() 语句中一样,"Data" 是当这个条件为真时的语句。这个 " : " 表示否则,"N/A" 是否则情况下的语句。希望这有助于您理解这个逻辑。

name = ("Data" != null) ? "Data" : "N/A";

console.log(name);


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