Inisialisasi yang lama di Jawa

214

Tipe Data Primitif - dokumen oracle mengatakan kisaran longdi Jawa adalah -9,223,372,036,854,775,808untuk 9,223,372,036,854,775,807. Tetapi ketika saya melakukan sesuatu seperti ini di gerhana saya

long i = 12345678910;

ini menunjukkan saya " The literal 12345678910 of type int is out of range" kesalahan.

Ada 2 pertanyaan.

1) Bagaimana cara menginisialisasi longdengan nilai 12345678910?

2) Apakah semua literal numerik berdasarkan jenisnya int?

aamadmi
sumber
Dan bagaimana dengan inisialisasi Long?
Wolfgang Fahl
1
@WolfgangFahl Aturan yang sama untuk Long- karena tinju otomatis, Anda dapat menggunakan Long i = 12345678910L, atau menggunakan Long i = Long.valueOf(12345678910L)untuk kasus-kasus di mana Anda tidak dapat menggunakan tinju otomatis.
Dorian Gray

Jawaban:

423
  1. Anda harus menambahkan L: long i = 12345678910L;.
  2. Iya.

BTW: itu tidak harus menjadi huruf besar L, tetapi huruf kecil bingung dengan 1berkali-kali :).

MByD
sumber
3
Kalau-kalau ada yang bertanya-tanya: hal yang sama berlaku untuk hex, misalnya0x200000000L
user149408
@Victor Long.valueOf (long) mengembalikan Long, bukan primitive long. Solusi MByD menghindari mengandalkan tinju otomatis.
gouessej
@ user149408 Mungkin maksud Anda 0x20000000L?
Pluto
2
@ Pluto 0x20000000Lakan bekerja tetapi masih dapat diwakili oleh int(integer 32-bit), dengan demikian 0x20000000akan berfungsi juga. 0x200000000Lmelanggar batas itu, membuat trailing Ldiperlukan.
user149408
59
  1. Anda perlu menambahkan Lkarakter ke akhir nomor untuk membuat Java mengenalinya sebagai panjang.

    long i = 12345678910L;
  2. Iya.

Lihat Tipe Data Primitif yang mengatakan "Huruf integer bertipe panjang jika diakhiri dengan huruf L atau l; jika tidak, itu bertipe int."

Jack Edmonds
sumber
39

Anda perlu menambahkan huruf besar Ldi akhir seperti itu

long i = 12345678910L;

Hal yang sama berlaku juga untuk float 3.0f

Yang seharusnya menjawab kedua pertanyaan Anda

Amir Raminfar
sumber
15

Untuk menginisialisasi panjang Anda harus menambahkan "L" ke akhir.
Ini bisa berupa huruf besar atau kecil.

Semua nilai numerik secara default int. Bahkan ketika Anda melakukan operasi apa pun bytedengan bilangan bulat apa pun, bytepertama kali dipromosikan ke intdan kemudian operasi apa pun dilakukan.

Coba ini

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

Anda mendapatkan kesalahan karena 2secara default int.
Oleh karena itu Anda mencoba untuk berkembang biak bytedengan int. Oleh karena itu hasil diketikkan ke intmana tidak dapat ditugaskan kembali byte.

Suraj Dubey
sumber