Nah, API untuk Integer.valueOf(String)
memang mengatakan bahwa String
ditafsirkan persis seolah-olah itu diberikan kepada Integer.parseInt(String)
. Namun, valueOf(String)
mengembalikan objek sedangkan mengembalikan yang primitif .new
Integer()
parseInt(String)
int
Jika Anda ingin menikmati manfaat caching potensial Integer.valueOf(int)
, Anda juga dapat menggunakan pemandangan buruk ini:
Integer k = Integer.valueOf(Integer.parseInt("123"))
Sekarang, jika apa yang Anda inginkan adalah objek dan bukan primitif, kemudian menggunakan valueOf(String)
mungkin lebih menarik daripada membuat objek baru dari parseInt(String)
karena mantan adalah konsisten hadir di seluruh Integer
, Long
, Double
, dll
Integer.valueOf(Integer.parseInt("123"))
tidak memiliki manfaat lebihInteger.valueOf("123")
atauInteger.valueOf(123)
selain dari siklus buang dan ukuran program Anda.Integer.valueOf(String)
melakukan caching persis sama denganInteger.valueOf(int)
. Bahkan, itu diterapkan sebagaiInteger.valueOf(Integer.parseInt(…))
...int
. Tanda tangan mengatakan itu mengembalikan sebuahInteger
, dan itulah yang dilakukannya. Jawaban ini juga sebagian salah ketika dikatakan mengembalikan 'baru'Integer
. Bukan itu yang dikatakan di Javadoc. Bebas untuk mengembalikan cacheInteger
.Dari forum ini :
sumber
mirip dengan
Perbedaannya adalah
valueOf()
mengembalikan sebuahInteger
, danparseInt()
mengembalikan sebuahint
(tipe primitif). Perhatikan juga bahwavalueOf()
dapat mengembalikanInteger
instance yang di- cache , yang dapat menyebabkan hasil membingungkan di mana hasil==
tes tampaknya sesekali benar. Sebelum melakukan autoboxing mungkin ada perbedaan dalam kenyamanan, setelah java 1.5 tidak masalah.Selain itu,
Integer.parseInt(s)
dapat mengambil tipe data primitif juga.sumber
Lihatlah sumber-sumber Java:
valueOf
sedang menggunakanparseInt
:parseInt
kembaliint
sumber
Integer.parseInt bisa mengembalikan int sebagai tipe asli.
Integer.valueOf mungkin benar-benar perlu mengalokasikan objek Integer, kecuali jika integer tersebut merupakan salah satu yang sudah dialokasikan sebelumnya. Ini lebih mahal.
Jika Anda hanya perlu tipe asli, gunakan parseInt. Jika Anda membutuhkan objek, gunakan valueOf.
Juga, karena alokasi potensial ini, autoboxing sebenarnya bukan hal yang baik dalam segala hal. Itu bisa memperlambat segalanya.
sumber
Variasi parse * mengembalikan tipe primitif dan versi valueOf mengembalikan Objek. Saya percaya versi valueOf juga akan menggunakan kumpulan referensi internal untuk mengembalikan objek SAMA untuk nilai yang diberikan, bukan hanya contoh lain dengan nilai internal yang sama.
sumber
Karena Anda mungkin menggunakan jdk1.5 + dan itu otomatis dikonversi ke int. Jadi dalam kode Anda Integer pengembalian pertama dan kemudian otomatis dikonversi ke int.
kode Anda sama dengan
sumber
Jika Anda memeriksa kelas Integer Anda akan menemukan nilai metode parseInt panggilan itu. Perbedaan besar adalah caching ketika Anda memanggil value of API. Itu cache jika nilainya antara -128 hingga 127. Silakan temukan di bawah tautan untuk informasi lebih lanjut
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
sumber
public Integer valueOf (String s)
Hasilnya adalah objek Integer yang mewakili nilai integer yang ditentukan oleh string.
Dengan kata lain, metode ini mengembalikan objek Integer yang sama dengan nilai: integer baru (Integer.parseInt (s))
sumber
Integer.parseInt hanya menerima String dan mengembalikan tipe integer primitif (int).
Iteger.value Jika menerima int dan String. Jika nilainya adalah String, valueOf mengubahnya menjadi int sederhana menggunakan parseInt dan mengembalikan Integer baru jika input kurang dari -128 atau lebih besar dari 127. Jika input dalam kisaran (-128 - 127) selalu mengembalikan objek Integer dari suatu IntegerCache internal. Kelas integer mempertahankan kelas IntegerCache statis dalam yang bertindak sebagai cache dan menyimpan objek integer dari -128 ke 127 dan itulah sebabnya ketika kami mencoba untuk mendapatkan objek integer untuk 127 (misalnya) kami selalu mendapatkan objek yang sama.
Iteger.valueOf(200)
akan memberikan Integer baru dari 200. Rasanyanew Integer(200)
Iteger.valueOf(127)
sama denganInteger = 127
;Jika Anda tidak ingin mengkonversi String ke penggunaan Integer
Iteger.valueOf
.Jika Anda tidak ingin mengkonversi String ke penggunaan int sederhana
Integer.parseInt
. Ini bekerja lebih cepat.Dan membandingkan Integer.valueOf (127) == Integer.valueOf (127) mengembalikan nilai true
Karena itu dibutuhkan objek Integer dengan referensi yang sama dari cache.
Tetapi Integer.valueOf (128) == Integer.valueOf (128) salah, karena 128 berada di luar kisaran IntegerCache dan mengembalikan Integer baru, sehingga objek akan memiliki referensi yang berbeda.
sumber
Kita harus menggunakan siapa saja tergantung pada kebutuhan kita. Dalam kasus ValueOf karena instantiasi objek. itu akan mengkonsumsi lebih banyak sumber daya jika kita hanya perlu nilai beberapa teks maka kita harus menggunakan parseInt, parseFloat dll.
sumber