我有一段代码使用条件运算符将变量x的值与5进行比较:
(x >=5 ? x : -x)
在常规if else语句中使用条件运算符有什么好处?
答案 0 :(得分:3)
请注意,//Custom event that is raised when the application is starting
private event EventHandler Starting = delegate { };
//Application developers override this method
//to perform actions when the application starts.
protected override void OnStart() {
//subscribe to event
Starting += onStarting;
//raise event
Starting(this, EventArgs.Empty);
}
private async void onStarting(object sender, EventArgs args) {
//unsubscribe from event
Starting -= onStarting;
//perform non-blocking actions
await sendHttpRequestAsync();
}
private async Task sendHttpRequestAsync() {
await ...
}
是表达式 - 它返回一个必须消耗的值
?:
Java中的z = (x >=5 ? x : -x)
构造不一个表达式(有语言)并且不返回值,所以在这个意义上它们不相当于。
它们等效的示例是if
选项执行赋值时:
if
这与
相同if("Cheese".equals(x)) {
type = "Dairy";
} else {
type = "Maybe not dairy";
}
你可以将type = "Cheese".equals(x) ? "Dairy" : "Maybe not dairy";
嵌套到任意深度,但实际上不应该 - 它变得非常难以阅读:
?:
答案 1 :(得分:1)
在每个可能的情况下,三元运算符不等同于if-else
。这是因为使用三元运算符的两种可能结果都是 return 值(例如,对控制台的简单打印不是返回值,因此它不能成为三元运算符中的可能结果之一)。
看,您可以使用if-else
执行此操作,但使用三元运算符无法实现:
if (x > 5) {
System.out.println("Statement is true");
else {
System.out.println("Statement is false");
}
您无法使用三元运算符
执行此操作x > 5 ? System.out.println("Statement is true") : System.out.println("Statement is false");
当使用三元运算符的两个结果都被视为返回值时,它们等效于if-else
。
答案 2 :(得分:0)
是的,它可以使用,但在这种情况下使用-x
当然没有意义,所以它取决于当String是输入时你想要返回什么。你可以这样做:
("Cheese".equals(x) ? <some object of expected type X> : <some other object of expected type X>)
其中任何其他类型的X
可以是String
。请记住"string".equals(x)
代替x.equals("string")
。这会阻止NullPointerException
。
对于原始值,您可以使用==
,但对于对象,您需要使用equals
方法。在==
上使用String
时会出现一些边缘情况,但我猜这些情况与您的情况无关,您可以在此主题之外阅读。
这可以像所有帐户上的if else一样使用吗?例如,你能吗? 比较字符串吗?
我很确定通过说like an if else
他的意思是条件运算符,它具有if else
行为,而不是if else
指令本身。
答案 3 :(得分:-1)
是的,它可以在Java中使用;但请注意,x =="Cheese"
不是比较Java中字符串的正确方法,您需要类似"Cheese".equals(x)
的内容。