2015-09-28 22 views
9

Tôi đang chuẩn bị cho mình một kỳ thi Java, và tôi đang đọc "Hướng dẫn học lập trình viên OCA Java SE 8 (Bài thi 1Z0-808)". Trong phần khai thác, tôi tìm thấy câu này:Toán tử Shift - toán hạng phải được chuyển đổi thành số nguyên nguyên?

Shift Toán tử: Toán tử shift có hai toán hạng phải là chuyển đổi thành số nguyên nguyên thủy.

tôi cảm thấy lạ với tôi vì vậy tôi thử nghiệm nó với dài:

public class HelloWorld{ 

    public static void main(String []args){ 
     long test = 3147483647L; 
     System.out.println(test << 1); 

    } 
} 

và nó làm việc, không có lỗi biên dịch và kết quả là chính xác. Cuốn sách có lỗi hay tôi hiểu nhầm câu trích dẫn của cuốn sách?

+5

JLS định nghĩa loại tích phân là _ "Các loại số là byte loại tích phân, ngắn, int, dài và char, ..." _ và cho toán tử shift _ "Đây là thời gian biên dịch lỗi nếu loại của mỗi toán hạng của toán tử shift, sau khi thăng hạng số đơn, không phải là kiểu tích phân nguyên thủy. "_ –

Trả lời

10

Toán tử shift >><< được xác định trong JLS section 15.19. Trích dẫn:

Khuyến mại số đơn nhất (§5.6.1) được thực hiện riêng biệt trên từng toán hạng. (Khuyến mãi số nhị phân (§5.6.2) không được thực hiện trên các toán hạng.)

Đây là lỗi biên dịch nếu loại toán hạng của toán tử shift, sau khi thăng hạng số đơn, không một kiểu tích phân nguyên thủy.

Khi nói về "số nguyên nguyên thủy", cuốn sách thực sự là nói về "loại nguyên thủy không thể thiếu" (quy định tại JLS section 4.2.1):

Các giá trị của các loại không thể thiếu là các số nguyên trong phạm vi sau đây:

  • Đối với byte, từ -128 đến 127, bao gồm
  • Đối với ngắn, -32.768-32.767, bao gồm
  • Đối với int, từ -2147483648 đến 2147483647, bao gồm
  • Ví dài, từ -9223372036854775808 để 9223372036854775807, bao gồm
  • Đối với char, từ '\ u0000' thành '\ uffff' bao gồm, có nghĩa là, 0-65.535
4

Chúng đang sử dụng integer không có trong thời trang Java int, mà đúng hơn là "loại số nguyên thay vì dấu phẩy động hoặc loại khác". Java của long là một số nguyên quá, nó chỉ là một số nguyên rộng 64-bit.

Các vấn đề liên quan