2011-08-22 29 views
5

tôi chỉ ra rằng khi tôi làm điều này trong Java:dereferencing giá trị số nguyên của một vòng lặp for trong java

for(int x = 0; x < 3; x++) 
{ 
    String bla = "bla"; 
    bla += x.toString(); 
} 

Nó (Netbeans trong trường hợp này) sẽ cho tôi biết tôi có thể không dereference x số nguyên của tôi trong một cách như vậy (như tôi sẽ làm trong C#).

Tại sao lại như vậy?

+0

Chỉ cần kiểm tra, mã có biên dịch và chạy không? –

+1

không có 'toString()' cho int nhưng trong trường hợp của bạn, bạn có thể làm 'bla + = x;' –

+0

Nó biên dịch và chạy trong C# yes – Mnescat

Trả lời

8

loại nguyên thủy không phải là đối tượng trong Java, vì vậy bạn cần phải sử dụng các phương pháp khác để làm điều đó, trong trường hợp này:

Integer.toString(x); 
+0

Cảm ơn bạn đã dành thời gian. Điều này đã trả lời câu hỏi của tôi – Mnescat

4

x không phải là Integer, là intint là loại nguyên thủy, vì vậy nó không có toString.

7

một int là một nguyên thủy, không phải là một đối tượng, và do đó không có một phương thức toString().

Nhưng bạn có thể làm điều này:

String bla = "bla" + x; 
5

int không phải là một đối tượng, nhưng một loại nguyên thủy. Do đó, bạn không thể gọi các phương thức tắt là int. Nếu bạn đã xác định nó là Integer, thông báo lỗi sẽ biến mất. Tuy nhiên, bạn có thể thực sự chỉ cần loại bỏ toString, bởi vì x sẽ bị ép buộc thành một số tự động String.

3

Trong java, kiểu nguyên thủy (boolean int, short, char, long, float, double) KHÔNG phải là đối tượng.

Tuy nhiên, chúng có loại trình bao bọc (Số nguyên, Ký tự, ...) có 1) hàm tĩnh utilyty và 2) các thể hiện của nó có thể bọc các giá trị nguyên thủy.

+1

Chính xác, đó là lý do tại sao mọi C# sẽ đến câu hỏi này: vì loại trình bao bọc tự động hộp nguyên thủy và trình bao có một toString(), tại sao không phải là x.toString() hợp lệ? x nên hộp để Integer và Integer có một toString(). Vì vậy, câu trả lời là không thực sự là một int là một nguyên thủy (nó là trong C# cũng như ông chỉ ra), nhưng câu hỏi là "tại sao là javas autoboxing không làm những gì các autoboxing .net không". –

+0

Đó thực sự là chính xác những gì tôi muốn biết – Mnescat

+0

Tôi nghĩ rằng trong NET int thực tế là đối tượng, vì vậy x.toString() không liên quan đến autoboxing ở tất cả. Nhưng nó là đối tượng giá trị, do đó, nơi đối tượng tham chiếu là cần thiết, autoboxing được tham gia. – Alpedar

4

Bạn đã khai báo x là loại int là giá trị nguyên thủy, không phải là đối tượng. Nguyên thủy không thể có phương pháp (như toString()) được gọi trên chúng. Bạn có thể sử dụng trình bao bọc nguyên thủy Integer nếu bạn muốn gọi toString() hoặc bạn có thể chỉ cần xóa cuộc gọi đến toString() và việc xử lý đặc biệt các chuỗi và nguyên thủy của Java sẽ tự xử lý.

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