2013-07-04 20 views
15

Tôi đã xem qua cú pháp này:Java: boolean trong println (boolean "in true": "in false")

System.out.println(boolean_variable ? "print true": "print false"); 
  • cú pháp này với hai chấm là gì: gọi là?
  • Tôi có thể tìm thông tin về nó ở đâu?
  • Tính năng này chỉ hoạt động với các toán tử logic hoặc được thực hiện theo các cách khác nhau không?
+0

Nó thường được gọi là "toán tử/vận hành bậc ba", ternary = 3. Đây là biểu thức if-then-else và có thể bị xâu chuỗi: 'x> 0,01? "tích cực": x <-0,01? "negative": "zero" '. Nhập: 'boolean? A: B' với kết quả chung của lớp A và B. Loại 'conditon'? null: "" 'là Chuỗi. –

Trả lời

54

? :conditional operator. (Nó không chỉ là phần : - toàn bộ đối số phương pháp là một cách sử dụng toán tử có điều kiện trong ví dụ của bạn.)

Nó thường được gọi là toán tử bậc ba, nhưng đó chỉ là một khía cạnh của bản chất - thay vì tên của nó. Nếu một toán tử bậc ba khác được đưa vào Java, thuật ngữ này sẽ trở nên mơ hồ. Nó được gọi là toán tử điều kiện vì nó có điều kiện (toán hạng đầu tiên), sau đó xác định toán tử nào trong hai toán hạng kia được đánh giá.

Các toán hạng đầu tiên được đánh giá, và sau đó hoặc thứ hai hoặc các toán hạng thứ ba được đánh giá dựa trên việc các toán hạng đầu tiên là đúng hay sai ...và kết quả là kết quả của toán tử.

Vì vậy, một cái gì đó như thế này:

int x = condition() ? result1() : result2(); 

là tương đương với:

int x; 
if (condition()) { 
    x = result1(); 
} else { 
    x = result2(); 
} 

Điều quan trọng là nó không đánh giá các toán hạng khác. Ví dụ: điều này là tốt:

String text = getSomeStringReferenceWhichMightBeNull(); 
int usefulCharacters = text == null ? 0 : text.length(); 
+0

Giả sử nó được gọi là toán tử bậc ba. Cảm ơn. Nếu bạn cuộn xuống liên kết, nó cũng được đề cập đến như là 'Toán tử điều kiện bậc ba? : ' – rajesh

+4

@rajesh: Có, giống như cách có" toán tử nhị phân + "và" toán tử đơn nhất + ":) –

2

Đó là câu lệnh if.

Phía bên trái là gì? là điều kiện, có gì giữa? và: là kết quả nếu điều kiện là đúng, và điều gì ở bên phải: là kết quả nếu điều kiện là sai.

2

Đây là ternary operator (http://en.wikipedia.org/wiki/? :). Nó có thể được sử dụng bất cứ nơi nào khi bạn cần một biểu thức nhỏ if.

+2

Bài báo bạn chỉ tới đề cập đến?: Được gọi là toán tử có điều kiện, không phải toán tử bậc ba –

4

Đó là một toán tử bậc ba, có nghĩa là thay vì có hai toán hạng như nhiều toán tử khác, nó có ba. Wikipedia on Ternary Operation và cách nó được sử dụng trong Java. Những gì nó nắm bắt xuống: hoạt động boolean (hoặc chỉ một biến) được đánh giá. Nếu nó được đánh giá là true, toán tử trả về giá trị/thi hành mã trước :, nếu không thì mã sau nó.

+6

Đó là toán tử * a * ternary, vì nó có ba toán hạng. Nó chỉ là "toán tử bậc ba" vì không có bất kỳ toán tử nào khác trong Java với ba toán hạng, nhưng đó không phải là tên của nó. –

+0

Rất đúng, cảm ơn và sửa chữa. – SBI

1

Đó là toán tử bậc ba và nó hoạt động với các toán tử. Nó có thể được sử dụng như một cách viết tắt của if-else trong một số trường hợp, nhưng không nên được sử dụng cho những thứ quá phức tạp vì nó có thể khó đọc.

Một ví dụ sẽ được gán giá trị cho một biến phụ thuộc vào một điều kiện:

String message = doOperation() ? "Success" : "Error occurred"; 
System.out.println(message); 

Trong trường hợp này, nếu doOperation trả về một boolean nói cho dù đó thành công hay không, thông điệp được hiển thị có thể được gán vào một dòng.

Xin lưu ý rằng ví dụ này không đại diện cho thực tiễn lập trình tốt.

0

Dấu chấm hỏi theo sau dấu hai chấm (hai dấu chấm) là toán tử bậc ba thường được gọi là inline nếu.

Trong trường hợp này, nó trả về một chuỗi tùy thuộc vào giá trị của boolean_variable.

http://en.wikipedia.org/wiki/%3F:

0

Xem here. Toán tử ternary tương tự như một biểu thức if nhưng khác ở chỗ nó là một biểu thức - nó có một giá trị trả về, trong khi các biểu thức thì không. Đôi khi bạn muốn sử dụng nó để làm cho mã của bạn ít lộn xộn hơn một chút.

20

Đó là các nhà điều hành có điều kiện, thường được gọi là nhà điều hành ternary bởi vì nó có 3 toán hạng: Một ví dụ sẽ là:

int foo = 10; 
int bar = foo > 5 ? 1 : 2; // will be 1 
int baz = foo > 15 ? 3 : 4; // will be 4 

Vì vậy, nếu các biểu hiện boolean đánh giá để true, nó sẽ trả về giá trị đầu tiên (trước dấu hai chấm), khác giá trị thứ hai (sau dấu hai chấm).

Bạn có thể đọc chi tiết cụ thể trong Java Language Specification, Chapter 15.25 Conditional Operator ?

+4

Cũng quan trọng cần lưu ý: biểu thức không được sử dụng không được đánh giá. Biểu thức 'x! = Null? x.Method(): 0' sẽ không kích hoạt một ngoại lệ tham chiếu null khi x là null. Đây là một lợi thế quan trọng so với một hàm thực hiện điều tương tự như toán tử bậc ba, vì tất cả các đối số được truyền cho các hàm luôn được đánh giá. –

2

Đối với câu hỏi của bạn:

  1. Các ?: (cả hai nhân vật với nhau) được gọi là nhà điều hành có điều kiện (hoặc nhà điều hành ternary). Chỉ cả hai cùng nhau sẽ làm việc.
  2. Tìm kiếm nhà điều hành java ternery
  3. Nó chỉ hoạt động cho boolean

Về nguyên tắc các nhà điều hành ternery là một rút ngắn if/else. boolean sẽ là điều kiện nếu, phần giữa ?: là chi nhánh if và một phần sau đây là chi nhánh else.

Xin lưu ý rằng loại trả về của toán tử điều kiện được xác định bởi chi nhánh đầu tiên.

1

Toán tử bậc ba của nó.

Toán tử bậc ba hoặc?, Là viết tắt nếu câu lệnh khác. Nó có thể được sử dụng để đánh giá một biểu thức và trả về một trong hai toán hạng tùy thuộc vào kết quả của biểu thức.

boolean b = true; 
String s = (b == true ? "True" : "False"); 

Điều này sẽ đặt giá trị của các chuỗi theo giá trị của boolean b. Điều này có thể được viết bằng cách sử dụng câu lệnh if else như sau:

boolean b = true; 
String s; 
if(b == true){ 
    s = "True"; 
}else{ 
    s = "False"; 
} 
1

Đây là một dạng ngắn của câu lệnh if-else.

Nó hoạt động theo cách này

(yourCondition ? STATEMENT1 : STATEMENT2) 
  • sẽ kiểm tra trình biên dịch cho tình trạng này.
  • IF trả về TRUE thì STATEMENT1 sẽ được thực thi.
  • ELSESTATEMENT2 sẽ được thực thi.