Mengapa tidak dapat memberikan objek Byte/nilai byte ke objek Double? apakah konversi dari Byte ke Double mempengaruhi presisi?

public class Primitive {
    public static void main(String []args) {


    byte x=5;
    Double y=(Double)x;  //Error :  Cannot cast from byte to Double.

    Byte n=7;
    Double m=(Double)n; //Error : cannot cast from Byte to Double.

    double c=n; //working right ..."double is primitive and Byte is object ".
    }
}

Apa gunanya mencegah casting Byte ke Double? .. saya tahu Double to Byte untuk alasan presisi jika saya tidak salah.


person Spmmr    schedule 21.04.2015    source sumber
comment
Anda tidak dapat mengubah tipe dan membungkusnya sebagai objek sekaligus. Ini adalah dua pemeran di Jawa. Saat Anda menjadi referensi, hal ini tidak dapat berarti bahwa objek akan benar-benar berubah, hanya jenis referensi yang dapat berubah.   -  person Peter Lawrey    schedule 21.04.2015


Jawaban (5)


Karena itulah cara kerja auto-boxing dan un-boxing.

Kode ini berfungsi dengan baik:

    byte x = 5;
    Integer i = (int) x;

Alasan : peta konversi tinju primitif dan pembungkusnya secara langsung. Apa yang saya katakan adalah hanya satu byte yang dapat dikonversi menjadi Byte tanpa pengecoran tipe eksplisit. Jika Anda perlu mengonversi byte menjadi Double, Anda perlu menggunakan sesuatu seperti ini secara eksplisit:

    byte x = 5;
    Double d = (Double) (double) x; 

karena hanya double yang dapat diubah menjadi Double.

person TheLostMind    schedule 21.04.2015

Jawabannya adalah cara tipe primitif dikotak otomatis ke pembungkus jenis di Jawa. Anda juga dapat melakukan sesuatu seperti

Double y = Byte.valueOf(x).doubleValue();
Double z = (double) x;
person Elliott Frisch    schedule 21.04.2015

Anda mencoba memasukkan byte primitif ke kelas Double, yang tidak dapat Anda lakukan. Jika Anda mencoba kode berikut, Anda tidak akan mendapat masalah:

byte x=5;
double y = (double)x;  // No error

Jika Anda ingin menggunakan kelas Double alih-alih primitif double, Anda dapat mencoba ini:

byte x=5;
Double y = Double.valueOf(x).doubleValue();
person Tim Biegeleisen    schedule 21.04.2015

Ganda dengan huruf kapital adalah sebuah kelas, bukan primitif.

Yang ingin Anda lakukan adalah

 byte x=5;
 double y=(double)x;  

 byte n=7;
 double m=(double)n; 

 double c=n; 

Mentransmisikan ganda ke dalam byte dengan menyebabkan hilangnya presisi (Anda akan kehilangan semua desimal). Satu byte seperti int tetapi panjangnya 8-bit.

person yafrack    schedule 21.04.2015

Anda dapat melihat dokumentasi autoboxing dan unboxing ini.

Autoboxing dan unboxing memungkinkan pengembang menulis kode yang lebih bersih, sehingga lebih mudah dibaca. Tabel berikut mencantumkan tipe primitif dan kelas pembungkusnya yang sesuai, yang digunakan oleh kompiler Java untuk autoboxing dan unboxing:

masukkan deskripsi gambar di sini

Jadi berdasarkan tabel ini Anda tidak bisa langsung melakukan autobox dan juga tidak bisa melakukan cast ke Double dari byte. Dan juga Anda tidak dapat membuka kotak untuk menggandakan dari Byte.


Tapi Anda bisa memasukkan tipe primitif ke primitif dan kemudian mengotomatiskannya ke objek kelas Wrappernya. Dan Anda dapat membuka kotak objek kelas Wrapper ke tipe primitifnya dan kemudian melemparkannya ke tipe primitif lainnya.

byte x = 5;
double temp = x;
Double y = temp;

// Can be written as
byte x1 = 5;
Double y1 = (double) x1;

// ================
Byte n = 7;
byte byteVal = n;
double doubleVal = byteVal;
Double m = doubleVal;

// Can be written as
Byte n1 = 7;
Double m1 = (double) (byte) n1;

// =================
// But I still wonder how below code is working
double c = n;
person Naman Gala    schedule 21.04.2015