Bagaimana cara saya mengkonversi dari int ke Long di Jawa?

219

Aku terus mencari baik di sini dan orang-orang Google mengalami kesulitan pergi dari longke intdan tidak jalan di sekitar lainnya. Namun saya yakin saya bukan satu-satunya yang mengalami skenario ini sebelum beralih dari intke Long.

Satu-satunya jawaban lain yang saya temukan adalah "Setel sebagai Long di tempat pertama" yang benar-benar tidak menjawab pertanyaan.

Saya awalnya mencoba casting tetapi saya mendapat " Cannot cast from int to Long"

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

Seperti yang dapat Anda bayangkan, saya sedikit bingung, saya terjebak menggunakan intkarena beberapa konten masuk sebagai ArrayListdan entitas tempat saya menyimpan info ini memerlukan nomor urut sebagai Long.

Hantu
sumber
for (long i = 0; i <myList.size (); ++ i) berfungsi juga
Instantsoup
@Instantsoup Ya itu akan bekerja untuk loop, tapi seperti yang saya tentukan di bagian bawah pertanyaan saya ArrayList saya bekerja dengan memerlukan int primitif ketika menentukan apa posisi indeks untuk mendapatkan
Ghosty
long longValue = intValue | 0L;
Daniel Jipa
Apa yang saya lakukan adalah: cast intto longfirst, lalu assign longto Long. misalnyaint x = 2; Long y = (long)x;
Eric Wang

Jawaban:

244

Perhatikan bahwa ada perbedaan antara pemain ke longdan pemain ke Long. Jika Anda memilih long(nilai primitif) maka itu harus secara otomatis kotak ke Long(tipe referensi yang membungkusnya).

Anda bisa menggunakan alternatif newuntuk membuat instance Long, menginisialisasi dengan intnilai.

Daniel Earwicker
sumber
31
Untuk mendemonstrasikan apa yang dikatakan Earwicker, Anda dapat memanggil Long.valueOf (i), yang membutuhkan waktu lama tetapi akan memperluas int dan memberi Anda kembali objek Long.
Grundlefleck
1
Autoboxing lebih disukai, karena tidak harus membuat Longobjek baru setiap waktu.
Michael Myers
2
(Peringatan: sisa komentar ini adalah dugaan dan dugaan) Jika nilai yang diberikan ke Long.valueOf () jatuh antara 0 dan 128, yang sangat umum, dan mengembalikan contoh yang di-cache, apakah itu lebih disukai daripada autoboxing? (Saya mungkin mengajukan pertanyaan baru jika Anda berpikir itu layak ...)
Grundlefleck
4
Autoboxing melakukan hal yang sama dengan itu. By the way, itu antara -127 dan 128.
Daniel Earwicker
6
@ Grundlefleck: Autoboxing menggunakan Long.valueOf()(jika saya ingat dengan benar), jadi tidak akan ada perbedaan sama sekali. Komentar saya adalah sebagai jawaban atas jawaban, bukan komentar Anda.
Michael Myers
193

Gunakan berikut: Long.valueOf(int);.

serg
sumber
5
Carilah, karena ini akan menghasilkan NullPointerException jika Anda menerima objek Integer yang nol.
will824
2
benar jika saya wron saya pikir mungkin jawabannya sudah lama karena saya tidak dapat menemukan metodeLong.valueOf(int) !!
shareef
5
@ will824 - variabel 'int' primitif tidak boleh nol.
Rondo
1
@shareef - lihat komentar serg - tapi saya pikir metode ini melemparkan int ke panjang yang autobox dengan Long ... jadi sepertinya mubazir
Rondo
1
@Rondo Integerkaleng, itulah yang dia katakan.
Moira
17

Jika Anda sudah memiliki int yang diketik sebagai Integer Anda dapat melakukan ini:

Integer y = 1;
long x = y.longValue();
saret
sumber
12

menggunakan

new Long(your_integer);

atau

Long.valueOf(your_integer);
Mohammadreza Tavakoli
sumber
6

Saya punya mainan kecil ini, yang juga berhubungan dengan antarmuka non generik. Saya setuju dengan itu melempar ClassCastException jika salah makan (OK dan senang)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}
Maxim Veksler
sumber
6

Di Jawa Anda bisa melakukan:

 int myInt=4;
 Long myLong= new Long(myInt);

dalam kasus Anda itu adalah:

content.setSequence(new Long(i));
cuaca berawan
sumber
6

Bagaimana tentang

int myInt = 88;

// Tidak akan dikompilasi

Long myLong = myInt;

// Kompilasi, dan pertahankan semangat non-NULL int. Yang terbaik pemain adalah tidak ada cast sama sekali . Tentu saja, use case Anda mungkin membutuhkan nilai NULL yang Panjang dan mungkin. Tetapi jika int, atau rindu lain adalah satu-satunya masukan Anda, dan metode Anda dapat dimodifikasi, saya akan menyarankan pendekatan ini.

long myLong = myInt;

// Mengkompilasi, adalah cara yang paling efisien, dan membuatnya jelas bahwa nilai sumber, adalah dan tidak akan pernah menjadi NULL.

Long myLong = (long) myInt;
Steven Spungin
sumber
3

Kami akan mendapatkan nilai panjang dengan menggunakan Numberreferensi.

public static long toLong(Number number){
    return number.longValue();
}

Ini berfungsi untuk semua tipe angka, berikut ini tesnya:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}
Thamme Gowda
sumber
3
 1,new Long(intValue);
 2,Long.valueOf(intValue);
Vicky
sumber
2

Saya memiliki banyak masalah dengan ini. Saya hanya ingin:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Di mana IntervalCount adalah Long, dan JSpinner ditetapkan untuk mengembalikan Long. Akhirnya saya harus menulis fungsi ini:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

yang tampaknya melakukan trik. Tidak ada jumlah pengecoran sederhana, tidak ada solusi di atas yang bekerja untuk saya. Sangat membuat frustrasi.

MaskedCoder
sumber
1
jika jPaidCountSpinner.getValue()mengembalikan Obyek yang sebenarnya adalah a Long, Anda pasti hanya perlu menempatkan (Long)pemain di depan. Juga coba letakkan breakpoint pada cek Anda untuk int.classatau yang lainnya long.class. Apakah itu pernah mengenai itu? Dan jika Anda memiliki objek seperti angka, itu akan mendukung java.util.Number, jadi serahkan ke sana dan panggil longValuemetode tersebut. Tidak perlu melalui string dalam kasus itu. Jadi fungsi ini bisa disederhanakan sedikit, bahkan jika Anda juga harus berurusan dengan string. (Bagian dari masalah di sini adalah dokumentasi referensi buruk untuk JSpinner).
Daniel Earwicker
1
Saya akhirnya melakukan sesuatu seperti ini. Saya tidak yakin nomor apa yang akan saya terima dan bersedia mengubahnya menjadi Long dengan sedikit perhatian untuk efisiensi tetapi ingin menghindari boilerplate.
Profiterole
2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)
Virendra Singh
sumber
0

Segera setelah hanya ada metode Long.valueOf(long), pemain dari intke longakan dilakukan secara implisit jika menggunakan Long.valueOf(intValue).

Cara yang lebih jelas untuk melakukan ini adalah

Integer.valueOf(intValue).longValue()
Stanislav Tsepa
sumber
longValuehanya (long), jadi satu-satunya hal yang Anda "dapatkan" di sini adalah Integercache internal.
Martin Schröder