Java'da bir uzun başlat


213

İlkel Veri Türleri - oracle doc aralığı diyor longJava olduğunu -9,223,372,036,854,775,808için 9,223,372,036,854,775,807. Ama tutulmada böyle bir şey yaptığımda

long i = 12345678910;

bana " The literal 12345678910 of type int is out of range" hatası veriyor .

2 soru var.

1) longile değeri nasıl başlatabilirim 12345678910?

2) Tüm sayısal değişmez değerler varsayılan olarak tür intmü?


Ve bir Long'u başlatmaya ne dersiniz?
Wolfgang Fahl

1
@WolfgangFahl Aynı kurallar Long- otomatik boks nedeniyle, otomatik boksu Long i = 12345678910Lkullanamayacağınız Long i = Long.valueOf(12345678910L)durumlar için kullanabilir veya kullanabilirsiniz .
Dorian Gray

Yanıtlar:


422
  1. Sen eklemek gerekir L: long i = 12345678910L;.
  2. Evet.

BTW: Büyük L harfi olması gerekmez, ancak küçük harf 1birçok kez karıştırılır :).


3
Birinin merak etmesi durumunda: Aynı şey hex için de geçerli, örneğin0x200000000L
user149408

@Victor Long.valueOf (uzun) ilkel değil Uzun değerini döndürür. MByD'nin çözümü, otomatik boksa güvenmekten kaçınır.
gouessej

@ user149408 Belki de demek istiyorsun 0x20000000L?
Pluto

2
@Pluto 0x20000000Lişe yarar ama yine de int(32 bit tam sayı) ile temsil edilebilir , bu yüzden de 0x20000000aynı şekilde çalışır. 0x200000000Lbu sınırın sonunu aşarak, izini Lgerekli kılar.
user149408

58
  1. LJava'nın onu uzun süre tanıması için karakteri sayının sonuna eklemeniz gerekir .

    long i = 12345678910L;
  2. Evet.

Bkz İlkel Veri Türleri diyor ki "o L harfi veya l ile biterse bir tamsayı değişmezi uzun tiptedir; aksi takdirde int türünde."


39

LSonuna böyle büyük harf eklemelisiniz

long i = 12345678910L;

Şamandıra için de aynı şey geçerli 3.0f

Her iki soruya da cevap vermeli


15

Uzun başlatmak için sonuna "L" eklemeniz gerekir.
Büyük veya küçük harf olabilir.

Tüm sayısal değerler varsayılan değerlerdir int. byteHerhangi bir tamsayı ile herhangi bir işlem yaptığınızda bile byte, önce yükseltilir intve daha sonra herhangi bir işlem gerçekleştirilir.

Bunu dene

byte a = 1; // declare a byte
a = a*2; //  you will get error here

2Varsayılan olarak olduğu için hata alıyorsunuz int.
Dolayısıyla sen çoğalmaya çalışıyoruz byteile int. Dolayısıyla sonuç typecasted alır inthangi geri atanamaz byte.

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.