什么是问号“?”和“冒号”:“操作员用于?

关于使用问号“?”的两个问题 和打印function括号内的冒号“:”运算符:它们做什么? 另外,有没有人知道他们的标准术语,或者我可以find更多关于他们的使用信息? 我读过,他们是类似于“如果”“其他”的声明。

int row = 10; int column; while (row >= 1) { column = 1; while(column <= 10) { System.out.print(row % 2 == 1 ? "<" : "\r>"); ++column; } --row; System.out.println(); } 

这是三元条件运算符 ,可以在任何地方使用,而不仅仅是打印语句。 它有时被称为“三元运算符”,但它不是唯一的三元运算符 ,只是最常见的一个。

维基百科展示了它的一个很好的例子:

在C,Java和JavaScript中编写一个传统的if-else结构:

 if (a > b) { result = x; } else { result = y; } 

这可以被重写为以下语句:

 result = a > b ? x : y; 

基本上它采取的forms是:

 boolean statement ? true result : false result; 

所以如果布尔语句是真的,你得到第一部分,如果它是假的,你得到第二部分。

尝试这些,如果仍然没有道理:

 System.out.println(true ? "true!" : "false."); System.out.println(false ? "true!" : "false."); 

这是一个if / else语句等同于

 if(row % 2 == 1){ System.out.print("<"); }else{ System.out.print("\r>"); } 
 a=1; b=2; x=3; y=4; answer = a > b ? x : y; 

answer=4因为条件是假的它需要y值。

一个问号(?)
。 如果条件为真,则使用该值

冒号(:)
。 如果条件为false,则使用该值

也许它可以成为Android的完美例子, 例如:

 void setWaitScreen(boolean set) { findViewById(R.id.screen_main).setVisibility( set ? View.GONE : View.VISIBLE); findViewById(R.id.screen_wait).setVisibility( set ? View.VISIBLE : View.GONE); } 

它是一个三元运算符,用简单的英语表示"if row%2 is equal to 1 then return < else return /r"

另外,虽然我会回答我的另一个相关问题,

 a = x ? : y; 

相当于:

 a = x ? x : y; 

如果x为false或null,则取y的值。

他们被称为三元运算符,因为它们是Java中唯一的一个。

与if … else结构的不同之处在于它们返回一些东西,而这可以是任何东西:

  int k = a > b ? 7 : 8; String s = (foobar.isEmpty ()) ? "empty" : foobar.toString ();