Java - cum se convertesc la int în șir

Metodele uzuale sunt: ​​Integer.toString (i) sau String.valueOf (i).

Java are suport special pentru operator + atunci când este folosit cu șiruri de caractere (vezi documentația), care traduce codul în care ați trimis:







la momentul compilării. Acest lucru este puțin mai eficient (sb.append () se termină cu interogarea Integer.getChars () .În orice caz, ar fi Integer.toString ()), dar funcționează.

Adăugați un șir gol:

Adăugați un întreg:

Extrageți linia finală:

propunerea și eforturile în curs de desfășurare pentru a schimba acest comportament, vizând JDK 9.

conduce la conversia șirurilor de la i la runtime. Tipul general al expresiei String. i este mai întâi convertit la un obiect Integer (noul Integer (i)), apoi se numește String.valueOf (obiect obj). Astfel, acest lucru este echivalent cu

Evident, acest lucru este puțin mai eficient decât să numim String.valueOf (noul Integer (i)). care va da același rezultat.

Această tehnică a fost predată la nivel de licență, începând cu clasa Java, pe care am preluat-o acum zece ani. Totuși, trebuie să remarcăm că, încă nu am primit metodele claselor String și Integer, IIRC.

Tehnica este simplă și rapidă. Dacă tot ce fac este să tipăresc ceva, o voi folosi (de exemplu, System.out.println ("" + i);). Totuși, cred că acest lucru nu este cel mai bun mod de a face o conversie, deoarece are nevoie de un gând să se gândească la ceea ce se întâmplă când El este folosit în acest fel. În plus, dacă performanța este o problemă, pare mai lentă (mai detaliat, ca în alte răspunsuri).

Doar pentru zâmbete :) Am scris clase pentru a testa trei metode: "+ i, Integer.toString și String.ValueOf. Fiecare test a convertit int int de la 1 la 10.000 în Strings. Apoi am executat fiecare comandă Linux de cinci ori. Integer.toString () a fost oarecum mai rapid decât String.valueOf () o dată, sunt legați de trei ori și String.valueOf () a fost mai rapid o dată; Cu toate acestea, diferența nu a depășit câteva milisecunde.







Tehnica «+ i» a fost mai lentă decât cea a fiecărui test, cu excepția unuia, atunci când ea a fost de 1 milisecundă mai rapid decât Integer.toString () și 1 milisecundă mai lent decât String.valueOf () (evident, în același test, unde String. ValueOf () este mai rapid decât Integer.toString ()). În timp ce, de obicei, a fost doar câteva milisecunde mai lent, a existat un test în cazul în care a fost de aproximativ 50 de milisecunde mai lent. YMMV.

Nu uitați să vă gândiți la JIT - primele conversii vor fi mult mai lent și vor distorsiona calendarul. Pe MacBook, concatenarea durează

20ns mai mult decât celelalte două metode (care le iau pe ambele

Personal, cred că "+" arată într-adevăr ca problema inițială a afișei afirmă "mirositor". Am folosit multe limbi OO în afară de Java. Dacă această sintaxă a fost adecvată, atunci Java pur și simplu interpretat la i, fără a fi nevoie de „“, la dorința de a converti la un șir de caractere și de a face aceasta, deoarece tipul de destinație lipsită de ambiguitate, și numai o singură valoare este dată pe dreapta. Alte similare cu „truc“ de a păcăli compilator, mojo rău, atunci când se analizează diferite versiuni javac, realizate de alți producători, sau cu alte platforme, în cazul în care codul este nevoie vreodată la portul la naiba, am nevoie pentru multe alte OOL doar ia typecast: .. (String) i wink

Având în vedere metoda mea de învățare și ușurința cu care se înțelege o astfel de construcție atunci când citim rapid codul, votez pentru metoda Integer.toString (i). Uitând ns sau două în modul în care pune în aplicare Java lucrurile în fundal și String.valueOf (i), această metodă mi se pare sincer și arată cu exactitate ceea ce se întâmplă: am și Integer, și vreau să fie convertite în line.

Bine zis, a făcut câteva ori, poate, doar utilizați StringBuilder din față - un răspuns bun la crearea de linii de text și Ints amestecate sau alte obiecte, deoarece aceasta este ceea ce va fi utilizat în fundal, oricum?

Numai cei doi cenți ai mei au aruncat în răspunsurile puii bine plătiți la întrebarea despre Om. zâmbet

MODIFICAREA RĂSPUNSULUI PROPRIU DUPĂ UNELE REFLECȚII:







Trimiteți-le prietenilor: