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 ".
}
}
防止将字节转换为Double是什么意思? ..如果我没有错,我知道Double to Byte的精确原因。
答案 0 :(得分:3)
因为这就是自动装箱和取消拳击的工作原理。
此代码可以正常工作:
byte x = 5;
Integer i = (int) x;
原因:直接装箱转换地图原语及其包装 。我所说的是只有一个字节可以转换为字节而无需显式的类型转换。如果您需要将byte
转换为Double
,则需要明确使用以下内容:
byte x = 5;
Double d = (Double) (double) x;
因为只有double
可以转换为Double
。
答案 1 :(得分:1)
答案是Java中包装类型的原始类型auto-boxed的方式。您也可以执行类似
的操作Double y = Byte.valueOf(x).doubleValue();
Double z = (double) x;
答案 2 :(得分:0)
您试图将原始byte
投射到Double
类,这是您无法做到的。如果您尝试使用以下代码,则不会出现问题:
byte x=5;
double y = (double)x; // No error
如果您想使用Double
类而不是原始double
,那么您可以试试这个:
byte x=5;
Double y = Double.valueOf(x).doubleValue();
答案 3 :(得分:0)
Double with capital letters是一个类,而不是一个原始类。
你想做的是
byte x=5;
double y=(double)x;
byte n=7;
double m=(double)n;
double c=n;
将double转换为一个导致精度损失的字节(您将丢失所有小数)。一个字节就像一个int但是长8位。
答案 4 :(得分:0)
您可以查看此documentation自动装箱和拆箱。
自动装箱和取消装箱可让开发人员编写更清晰的代码,使其更易于阅读。下表列出了原始类型及其相应的包装类,Java编译器使用这些类进行自动装箱和拆箱:
所以基于这个表你不能直接自动装箱,也不能从字节转换为Double。而且你也不能从字节中取消加倍。
但是您可以将基元转换为基本类型,然后将其自动停放到其Wrapper类对象。您可以将Wrapper类对象解包为其基本类型,然后将其转换为其他基本类型。
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;