Java'da int'ten Long'a nasıl dönüştürebilirim?


219

Burada hem bulma tutmak ve Google insanlar giden sorunları olan longiçin intdeğil, başka bir yol etrafta. Yine Eminim gelen gitmeden önce bu senaryo içine tükendi yalnız değilim değilim intiçin Long.

Bulduğum diğer tek cevap, "Soruyu gerçekten ele almayan" İlk etapta Uzun olarak ayarla "idi.

Başlangıçta yayın yapmayı denedim ama " 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);
}

Biraz şaşkın olduğumu tahmin edebileceğiniz gibi, intbazı içerikler bir olarak geldiğinden ArrayListve bu bilgiyi sakladığım varlık için Long olarak sıra numarasını gerektirdiğinden kullanıyorum.


for (long i = 0; i <myList.size (); ++ i) da çalışıyor
Instantsoup

@Instantsoup Evet, döngü için çalışacaktır, ancak sorumun altında çalıştığım ArrayList, hangi dizin konumunu alacağınızı
belirlerken

long longValue = intValue | 0L;
Daniel Jipa

Yaptığım şey geçerli: döküm intiçin long, sonra atamak longiçin Long. örneğinint x = 2; Long y = (long)x;
Eric Wang

Yanıtlar:


244

Bir yayınla longve yayın arasında bir fark olduğunu unutmayın Long. Eğer döküm halinde longdaha sonra otomatik olarak bir kutulu edilmelidir (temel bir değere) Long(bunu saran bir referans türü).

Alternatif olarak, değeri ile başlatan newbir örneği oluşturmak için kullanabilirsiniz .Longint


31
Earwicker'ın söylediklerini göstermek için, uzun süren ancak bir int genişletecek ve size bir Long nesnesi verecek olan Long.valueOf (i) diyebilirsiniz.
Grundlefleck

1
Otomatik boks tercih edilir, çünkü Longher seferinde yeni bir nesne oluşturmak zorunda değildir .
Michael Myers

2
(Uyarı: Bu yorumun geri kalanı tahmin ve varsayımdır) Long.valueOf () öğesine verilen değerler 0 ile 128 arasındaysa, bu çok yaygındır ve önbelleğe alınmış bir örnek döndürürse, bu otomatik kutulamaya göre tercih edilir mi? (Buna değer olduğunu düşünüyorsanız yeni bir soru sorabilirim.)
Grundlefleck

4
Otomatik boks bununla aynı şeyi yapar. Bu arada, -127 ve 128 arasında.
Daniel Earwicker

6
@Grundlefleck: Otomatik boks kullanır Long.valueOf()(doğru hatırlıyorsam), bu yüzden hiç bir fark olmaz. Yorumum, yorumunuza değil, cevabın cevabıydı.
Michael Myers

194

Aşağıdakileri kullanın: Long.valueOf(int);.


5
Null olan bir Integer nesnesi alıyorsanız, bu bir NullPointerException oluşturacağına dikkat edin.
will824

2
doğru eğer am wron cevap olabilir eski olabilir çünkü ben yöntemi bulamıyorumLong.valueOf(int) !!
shareef

5
@ will824 - ilkel bir 'int' değişkeni boş olamaz.
Rondo

1
@shareef - serg'in yorumuna bakın - ama bu yöntemin uzun bir oto kutuya uzun sürdüğünü düşünüyorum ... bu yüzden gereksiz görünüyor
Rondo

1
@Bir teneke Integerkutu, ne dedi.
Moira

17

Eğer int değerini bir Tamsayı olarak yazdıysanız, bunu yapabilirsiniz:

Integer y = 1;
long x = y.longValue();


6

Aynı zamanda jenerik olmayan arayüzlerle de ilgilenen bu küçük oyuncağım var. Ben yanlış besleme (Tamam ve mutlu) ise bir ClassCastException atma ile iyiyim

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

6

Java'da şunları yapabilirsiniz:

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

sizin durumunuzda:

content.setSequence(new Long(i));

6

Nasıl?

int myInt = 88;

// Derlenmeyecek

Long myLong = myInt;

// int NULL olmayan ruhunu derler ve korur. En iyi döküm olduğunu da hiç dökme . Tabii ki, kullanım durumunuz Uzun ve olası NULL değerleri gerektirebilir. Ancak int veya diğer uzun ürünler tek girdinizse ve yönteminiz değiştirilebilirse, bu yaklaşımı öneririm.

long myLong = myInt;

// Derler, en etkili yoldur ve kaynak değerin NULL olduğunu ve asla NULL olmayacağını açıkça belirtir.

Long myLong = (long) myInt;

3

NumberReferans kullanarak uzun değeri alacağız .

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

Tüm sayı türleri için çalışır, bir test:

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

}

3
 1,new Long(intValue);
 2,Long.valueOf(intValue);

2

Bu konuda büyük sıkıntılar yaşadım. Sadece istedim:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

IntervalCount bir Uzun ve JSpinner bir Uzun döndürmek için ayarlanmıştır. Sonunda bu işlevi yazmak zorunda kaldım:

    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;
}

hile yapıyor gibi görünüyor. Basit döküm yok, yukarıdaki çözümlerin hiçbiri benim için işe yaramadı. Çok sinir bozucu.


1
eğer jPaidCountSpinner.getValue()getiri aslında a'da bir nesne Long, kesinlikle sadece koymak gerekir (Long)önünde döküm. Ayrıca için Çekinizde bir kesme noktası koymayı deneyin int.classya long.classvs hiç vurmak mı? Ve sayı benzeri bir nesneniz varsa, bunu destekleyecektir java.util.Number, bu yüzden onu buna dökün ve longValueyöntemi çağırın . Bu durumda bir dize üzerinden gitmeye gerek yok. Bu nedenle, dizelerle uğraşmanız gerekse bile bu işlev biraz basitleştirilebilir. (Buradaki sorunun bir kısmı için kötü başvuru dokümanlarıdır JSpinner).
Daniel Earwicker

1
Ben de böyle bir şey yaptım. Ne tür bir sayı alacağımdan emin değildim ve verimliliği çok az endişeyle Long'a dönüştürmeye istekliydi ama kazandan kaçınmak istiyordum.
Profiterol

2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)

0

En kısa sürede tek yöntem olmadığı için Long.valueOf(long), gelen döküm intiçin longkullanılması halinde örtük yapılacaktır Long.valueOf(intValue).

Bunu yapmanın daha net yolu

Integer.valueOf(intValue).longValue()

longValuesadece bir (long), bu yüzden burada "kazandığınız" tek şey Integerdahili önbellektir.
Martin Schröder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.