2011-08-22 6 views
5

acabo cuenta de que cuando hago esto en Java:Desreferenciar el valor entero de un bucle en Java

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

It (Netbeans en este caso) me dirá que no se puede eliminar la referencia de mi x número entero en de esa manera (como lo haría en C#).

¿Por qué es eso?

+0

Solo para verificar, ¿se compila y ejecuta el código? –

+1

no hay 'toString()' para int pero en su caso, puede hacer 'bla + = x;' –

+0

Compila y ejecuta en C# sí – Mnescat

Respuesta

8

Los tipos primitivos no son objetos en Java, por lo que es necesario utilizar otros métodos para hacer eso, en este caso:

Integer.toString(x); 
+0

Gracias por su tiempo. Esto ha respondido a mi pregunta – Mnescat

4

x no es una Integer, su un int, int y es un tipo primitivo, por lo que no tiene toString.

7

un int es un primitivo, no un objeto, y por lo tanto no tiene una método toString()

pero se puede hacer esto:

String bla = "bla" + x; 
5

int no es un objeto, sino un tipo primitivo. Por lo tanto, no puede llamar a los métodos fuera de int. Si lo definió como Integer, el mensaje de error desaparecerá. Sin embargo, realmente puede deshacerse de toString, porque x se forzará en un String automáticamente.

3

En Java, los tipos primitivos (booleano int, corto, char, largo, flotante, doble) NO son objetos.

Sin embargo, tienen el tipo de envoltura (Integer, Character, ...) que tienen 1) funciones estáticas utilty y 2) sus instancias pueden envolver valores primitivos.

+1

Exactamente, que es la razón por la cual cualquier C# llegará a esta pregunta: dado que el tipo de envoltorio automáticamente encuadra la primitiva, y el envoltorio tiene un toString(), ¿por qué entonces no es válido x.toString()? x debe boxear con Integer y Integer tiene un toString(). Entonces, la respuesta no es realmente que un int sea un primitivo (está en C# tan bien como señala), pero la pregunta es "¿por qué el autoboxing javas no hace lo que el .box autoboxing hace". –

+0

Eso es exactamente lo que quería saber – Mnescat

+0

Pensé que en .NET int en realidad es un objeto, por lo que x.toString() no implica el autoboxing en absoluto. Pero es un objeto de valor, por lo que cuando se necesita un objeto de referencia, se involucra el autoboxing. – Alpedar

4

Has declarado x ser del tipo int que es un valor primitivo, no es un objeto. Los primitivos no pueden tener métodos (como toString()) invocados. Puede usar el envoltorio primitivo Integer si desea invocar toString(), o simplemente puede eliminar la llamada al toString() y el manejo especial de cadenas y primitivas de Java se encargará solo.

Cuestiones relacionadas