2010-12-14 39 views
5

Tôi đang sử dụng eclipse java ee để thực hiện lập trình java.Java: Kết quả dài = -1: không thể chuyển đổi từ int sang dài

tôi đã có dòng mã sau đây trong một trong những chức năng của tôi:

Long result = -1; 

Tôi đã nhận lỗi sau:

Type mismatch: cannot convert from int to Long

tôi có thể không hoàn toàn hiểu tại sao khi tôi thêm một số để biến nó cung cấp lỗi này.

Sự cố này có thể được giải quyết như thế nào và tại sao điều đó lại xảy ra ngay từ đầu?

Trả lời

15

Không có chuyển đổi nào giữa đối tượng Longint để bạn cần thực hiện nó từ long. Thêm một L làm cho số nguyên -1 thành một long (-1L):

Long result = -1L; 

Tuy nhiên có một sự chuyển đổi từ int một long để làm việc này:

long result = -1; 

Vì vậy, bạn có thể viết như là tốt này:

Long result = (long) -1; 

Chuyển đổi từ nguyên thủy (), long v.v ...) cho đối tượng Trình bao bọc (Integer, Long vv) được gọi là hộp tự động, đọc thêm here.

+5

+1 và điều quan trọng là viết hoa. '-1l' trông giống như' -11' :) – Bozho

0

Để xác định một hằng số kiểu long, hậu tố nó với một L:

Long result = -1L; 

Nếu không có sự L, các loại thông dịch các hằng số như một int, mà không phải là loại giống như một long.

1
Long result = -1L; 
4

-1 có thể được tự động đóng hộp thành Số nguyên.

Như vậy:

Integer result = -1; 

công trình, tương đương với:

Integer result = Integer.valueOf(-1); 

Tuy nhiên, một Integer không thể được gán cho một dài, vì vậy việc chuyển đổi tổng thể trong câu hỏi bị lỗi.

Long result = Integer.valueOf(-1); 

cũng không hoạt động.

Nếu bạn làm:

Long result = -1L; 

nó tương đương (một lần nữa vì auto-boxing) tới:

Long result = Long.valueOf(-1L); 

Lưu ý rằng L làm cho nó một long chữ.

2

Trước hết, hãy kiểm tra phiên bản Java của bạn: chạy "java -version" từ dòng lệnh.

Trong phiên bản Java trước 1.5, cú pháp chính xác là:

Kết quả dài = new Long (1L);

Trong java> 1,5 nó được thực hiện tự động. Nó được gọi là "autoboxing".

Chữ hoa "L" cho Java biết số nên được hiểu là dài.

+2

'Long.valueOf (1L);' tốt hơn 'new Long (1L);', bởi vì nó có thể cung cấp cho bạn một đối tượng được lưu trữ. Xem tài liệu API của 'Long.valueOf (long)' để biết thêm thông tin. – Jesper

+0

Vì vậy, chữ thường 'l'. – EJP

1

Làm thế nào nó xảy ra ở nơi đầu tiên là chữ số -1int. Kể từ Java5, bạn có thể tự động chuyển nó thành một số Integer, khi bạn sử dụng nó như trên Object, nhưng nó sẽ không được chuyển thành Long (chỉ long giây).

Lưu ý rằng một int được tự động mở rộng thành một dài khi cần thiết:

long result = -1; // this is okay 

Cách đối diện cần chuyển kiểu tường minh:

int number = (int) result; 
1

-1 là một giá trị int nguyên thủy, Long tuy nhiên là lớp wrapper java.lang.Long. Giá trị nguyên nguyên không thể gán cho đối tượng Long. Có hai cách để giải quyết vấn đề này.

  1. Thay đổi kiểu để long

    Nếu bạn thay đổi kiểu từ lớp wrapper Long để nguyên thủy loại long java tự động phôi giá trị số nguyên cho một giá trị lâu.

    long result = -1;

  2. Thay đổi int giá trị lâu

    Nếu bạn thay đổi giá trị số nguyên từ -1 để -1L để thay đổi rõ ràng nó vào một java đen dài có thể sử dụng giá trị nguyên thủy này để tự động quấn giá trị này đến một java.lang.Long vật.

    Long result = -1L;

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