2011-08-22 10 views
5

prostu zorientowali się, że kiedy to zrobić w Javie:wyłuskania wartości całkowitej dla pętli w java

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

It (Netbeans w tym przypadku) powie mi, nie mogę dereference moim x liczby całkowitej w taki sposób (jak w C#).

Dlaczego tak jest?

+0

Aby sprawdzić, czy kod się kompiluje i działa? –

+1

nie ma 'toString()' for int ale w twoim przypadku możesz zrobić 'bla + = x;' –

+0

To kompiluje i działa w C# yes – Mnescat

Odpowiedz

8

prymitywne typy nie są obiektami w Javie, więc trzeba korzystać z innych metod, aby to zrobić, w tym przypadku:

Integer.toString(x); 
+0

Dziękuję za poświęcony czas. To odpowiedział na moje pytanie – Mnescat

4

x nie jest Integer, jego int i int to prymitywny typ, więc nie ma toString.

7

int jest prymitywny, nie przedmiot, a tym samym nie mają Metoda toString().

Ale można to zrobić:

String bla = "bla" + x; 
5

int nie jest obiektem, ale prymitywny typ. Dlatego nie można wywoływać metod z poziomu int. Jeśli zdefiniowałeś to jako Integer, komunikat o błędzie zniknął. Jednak naprawdę można po prostu pozbyć się toString, ponieważ x zostanie automatycznie wymuszony na String.

3

W języku java typy pierwotne (boolean int, short, char, long, float, double) NIE są obiektami.

Jednak mają one typ opakowania (Integer, Character, ...), które mają 1) przydatne funkcje statyczne i 2) jego wystąpienia mogą zawijać wartości pierwotne.

+1

Dokładnie, dlatego wszelkie C# przyjdzie na to pytanie: ponieważ typ opakowania automatycznie pola prymitywów i wrapper ma toString(), dlaczego nie jest x.toString() valid? x powinno być ustawione na Integer, a Integer to toString(). Tak więc odpowiedź nie jest tak naprawdę, że int jest prymitywne (to jest w języku C#, jak również wskazuje), ale pytanie brzmi "dlaczego javas autoboxing nie robi tego, co robi .netoxoxing". –

+0

To jest dokładnie to, co chciałem wiedzieć. – Mnescat

+0

Myślałem, że w .NET int jest obiektem, więc x.toString() w ogóle nie wymaga autoboxingu. Ale jest to obiekt wartościowy, więc tam, gdzie potrzebny jest obiekt referencyjny, włącza się autoboxing. – Alpedar

4

Użytkownik zadeklarował, że x ma być typu pierwotnego, a nie obiektowego. Prymitywy nie mogą mieć wywoływanych metod (takich jak toString()). Możesz użyć prymitywnego opakowania Integer, jeśli chcesz wywołać toString(), lub możesz po prostu usunąć wywołanie do toString(), a specjalna obsługa Java łańcuchów i prymitywów zajmie się sama.