Po prostu bym użył "" + 42, ale hej, to ja. Formularz 2 da w wyniku nowy obiekt jako liczbę pośrednią (dla większości wartości i). To także więcej pisania.
16
@pst: jeśli obiekt pośredni jest dla ciebie problemem, "" + 42to nie jest lepszy, ponieważ wymaga produktu pośredniego, StringBuilderktóry jest znacznie cięższy niż Integer.
Joachim Sauer
47
„” + 42 może działać, ale to zły pomysł. Ludzie tacy jak ja przyjrzą się Twojemu kodowi i spróbują dowiedzieć się, co do cholery stało się z pustym ciągiem.
Mainguy,
3
Nie polecałbym, "" + 42ponieważ w przypadku dodawania ciągów liczb całkowitych możesz w końcu dodać wartości i nie zdawać sobie z tego sprawy.
BoltzmannBrain
20
Jeśli nie lubisz dużo pisać, prawdopodobnie nie powinieneś programować w Javie.
Jeśli zadzwonisz new Integer(i), utwórz instancję typu Integer, która jest pełnym obiektem Java zawierającym wartość twojej int. Następnie należy wywołać toStringmetodę na to, aby poprosić go, aby powrócić ciąg znaków reprezentujący siebie .
Jeśli chcesz tylko wydrukować int , użyj pierwszego, ponieważ jest lżejszy, szybszy i nie zużywa dodatkowej pamięci (oprócz zwracanego ciągu).
Jeśli chcesz, aby obiekt reprezentujący wartość całkowitą - na przykład w celu umieszczenia go w kolekcji - użyjesz drugiego, ponieważ daje on pełnoprawny obiekt do robienia wszelkiego rodzaju rzeczy, których nie możesz zrobić od razu int.
Tak. Chyba że musisz użyć RADIX (w takim przypadku musisz użyć Integer.toString)
marcolopes,
14
new Integer(i).toString();
Ta instrukcja tworzy obiekt liczby całkowitej, a następnie wywołuje jej metody, toString(i)aby zwrócić ciąg reprezentujący wartość liczby całkowitej .
Integer.toString(i);
To zwraca obiekt String reprezentujący int konkretne (integer) , ale tutaj toString(int)jest staticmetoda.
Podsumowanie w pierwszym przypadku zwraca ciąg znaków reprezentujący ciąg obiektów, a tak jak w drugim przypadku ciąg znaków reprezentuje liczbę całkowitą.
jest to zdecydowanie zła forma, ponieważ oba polegają na dość subtelnej części języka Java i są mniej wydajne niż Integer.toString (i). Zobacz ten post SO
Generalnie źle jest robić rzeczy w tak nieintuicyjny sposób. Bardziej oczywiste opcje, takie jak Integer.toString()użycie dodatkowych naciśnięć klawiszy, są jednak znacznie wyraźniejsze, co ma kluczowe znaczenie, gdy chcesz zachować kod.
Calvin Li
Czy nie wywołałoby to automatycznie toString()metody zmiennej całkowitej ?
Ankit Deshpande
11
Chociaż podoba mi się zalecenie fhucho dotyczące
String.valueOf(i)
Ironią jest to, że ta metoda faktycznie wywołuje
Integer.toString(i)
Tak więc użyj String.valueOf(i) jeśli podoba ci się to, jak to czyta i nie potrzebujesz podstawki, ale także wiedząc, że jest mniej wydajna niż Integer.toString(i).
Jeśli chodzi o pomiar wydajności, jeśli rozważasz wydajność czasową, to Integer.toString (i); jest drogi, jeśli dzwonisz mniej niż 100 milionów razy. W przeciwnym razie, jeśli jest to ponad 100 milionów wywołań, nowa liczba całkowita (10) .toString () będzie działać lepiej.
Poniżej znajduje się kod, za pomocą którego możesz spróbować zmierzyć wydajność,
publicstaticvoid main(String args[]){int MAX_ITERATION =10000000;long starttime =System.currentTimeMillis();for(int i =0; i < MAX_ITERATION;++i){String s =Integer.toString(10);}long endtime =System.currentTimeMillis();System.out.println("diff1: "+(endtime-starttime));
starttime =System.currentTimeMillis();for(int i =0; i < MAX_ITERATION;++i){String s1 =newInteger(10).toString();}
endtime =System.currentTimeMillis();System.out.println("diff2: "+(endtime-starttime));}
Pod względem pamięci
nowa liczba całkowita (i) .toString ();
zajmie więcej pamięci, ponieważ za każdym razem utworzy obiekt, więc nastąpi fragmentacja pamięci.
Pomógłby najpierw rozgrzać się, w przeciwnym razie wyniki nie są ważne!
sixones
Jeśli mówisz, że jeden jest drogi w jednym przypadku, a drugi jest lepszy w drugim przypadku, oznacza to, że drugi jest lepszy / niedrogi w każdej sytuacji.
Myślę, że tak jest lepiej, ponieważ jak zauważył @Dhiraj, jeśli chodzi o pamięć, „nowa liczba całkowita (i) .toString ();” zajmie więcej pamięci, ponieważ tworzy nowy obiekt zamiast po prostu uzyskać wartość całkowitą i przekonwertować ją na ciąg.
Patricia,
4
@Lucy Integer.valueOf (i) zwraca nową liczbę całkowitą, więc nie ma różnicy
inigoD
W ogóle nie udzielasz odpowiedzi na pytanie. Pytanie brzmi, jaka jest różnica między bla a bla, a nie jaki jest lepszy zamiennik bla.
ahitt6345,
2
Prosty sposób jest po prostu połączony ""z liczbą całkowitą:
Tutaj
Integer.toStringwywołuje metodę statyczną w klasie Integer. Nie wymaga wywołania obiektu.
Jeśli zadzwonisz new Integer(i), najpierw utwórz instancję typu Integer, która jest pełnym obiektem Java hermetyzującym wartość twojego int. Następnie wywołujesz na nim toStringmetodę, aby poprosić ją o zwrócenie reprezentacji ciągu.
Integer i =newInteger(8);// returns a string representation of the specified integer with radix 8String retval = i.toString(516,8);System.out.println("Value = "+ retval);
2)new Integer(i).toString()
int i =506;String str =newInteger(i).toString();System.out.println(str +" : "+newInteger(i).toString().getClass());////506 : class java.lang.String
"" + 42
, ale hej, to ja. Formularz 2 da w wyniku nowy obiekt jako liczbę pośrednią (dla większości wartości i). To także więcej pisania."" + 42
to nie jest lepszy, ponieważ wymaga produktu pośredniego,StringBuilder
który jest znacznie cięższy niżInteger
."" + 42
ponieważ w przypadku dodawania ciągów liczb całkowitych możesz w końcu dodać wartości i nie zdawać sobie z tego sprawy.Odpowiedzi:
Integer.toString
wywołuje metodę statyczną w klasieInteger
. Nie wymaga wystąpieniaInteger
.Jeśli zadzwonisz
new Integer(i)
, utwórz instancję typuInteger
, która jest pełnym obiektem Java zawierającym wartość twojej int. Następnie należy wywołaćtoString
metodę na to, aby poprosić go, aby powrócić ciąg znaków reprezentujący siebie .Jeśli chcesz tylko wydrukować
int
, użyj pierwszego, ponieważ jest lżejszy, szybszy i nie zużywa dodatkowej pamięci (oprócz zwracanego ciągu).Jeśli chcesz, aby obiekt reprezentujący wartość całkowitą - na przykład w celu umieszczenia go w kolekcji - użyjesz drugiego, ponieważ daje on pełnoprawny obiekt do robienia wszelkiego rodzaju rzeczy, których nie możesz zrobić od razu
int
.źródło
new Integer(i).toString()
najpierw tworzy wokół (nadmiarowy) obiekt otokii
(który sam może być obiektem otokiInteger
).Integer.toString(i)
jest preferowany, ponieważ nie tworzy niepotrzebnych obiektów.źródło
Inną opcją jest
String.valueOf
metoda statyczna .Wydaje mi się to nieco bardziej właściwe niż
Integer.toString(i)
dla mnie. Gdy zmieni się typ i, na przykład odint
dodouble
, kod pozostanie poprawny.źródło
new Integer(i).toString();
Ta instrukcja tworzy obiekt liczby całkowitej, a następnie wywołuje jej metody,
toString(i)
aby zwrócić ciąg reprezentujący wartość liczby całkowitej .Integer.toString(i);
To zwraca obiekt String reprezentujący int konkretne (integer) , ale tutaj
toString(int)
jeststatic
metoda.Podsumowanie w pierwszym przypadku zwraca ciąg znaków reprezentujący ciąg obiektów, a tak jak w drugim przypadku ciąg znaków reprezentuje liczbę całkowitą.
źródło
Polecam również korzystanie
Prosty i skuteczny.
źródło
Integer.toString()
użycie dodatkowych naciśnięć klawiszy, są jednak znacznie wyraźniejsze, co ma kluczowe znaczenie, gdy chcesz zachować kod.toString()
metody zmiennej całkowitej ?Chociaż podoba mi się zalecenie fhucho dotyczące
Ironią jest to, że ta metoda faktycznie wywołuje
Tak więc użyj
String.valueOf(i)
jeśli podoba ci się to, jak to czyta i nie potrzebujesz podstawki, ale także wiedząc, że jest mniej wydajna niżInteger.toString(i)
.źródło
Jeśli chodzi o pomiar wydajności, jeśli rozważasz wydajność czasową, to Integer.toString (i); jest drogi, jeśli dzwonisz mniej niż 100 milionów razy. W przeciwnym razie, jeśli jest to ponad 100 milionów wywołań, nowa liczba całkowita (10) .toString () będzie działać lepiej.
Poniżej znajduje się kod, za pomocą którego możesz spróbować zmierzyć wydajność,
Pod względem pamięci
zajmie więcej pamięci, ponieważ za każdym razem utworzy obiekt, więc nastąpi fragmentacja pamięci.
źródło
new Integer(10).toString() can be simplified to Integer.toString(10)
”Lepszy:
źródło
Prosty sposób jest po prostu połączony
""
z liczbą całkowitą:teraz
s
będzie miał100
wartość ciągu.źródło
Tutaj
Integer.toString
wywołuje metodę statyczną w klasie Integer. Nie wymaga wywołania obiektu.Jeśli zadzwonisz
new Integer(i)
, najpierw utwórz instancję typu Integer, która jest pełnym obiektem Java hermetyzującym wartość twojego int. Następnie wywołujesz na nimtoString
metodę, aby poprosić ją o zwrócenie reprezentacji ciągu.źródło
1.
Integer.toString(i)
2)
new Integer(i).toString()
źródło