我对Java中的原始类型有疑问(int,double,long等).
问题一:
Java中是否有一种方法可以拥有一个数据类型,比如可以容纳任何原始类型的XType(无损类型)?
假设用法的示例:
int x = 10;
double y = 9.5;
XType newTypeX = x;
XType newTypeY = y;
int m = newTypeX;
问题二:
是否可以从这些位中分辨出此数字(原始类型)是整数,双精度数还是浮点数等?
解决方法:
您可以在第一个代码段中使用Number
类,它是所有numeric primitive wrapper classes的超类:
int x = 10;
double y = 9.5;
Number newTypeX = x;
Number newTypeY = y;
基本类型(整数,双精度)和对象类型(数字)之间的转换可以通过称为autoboxing的功能进行.但是,此行无法编译:
int m = newTypeX;
因为您不能将超类型变量分配给int.编译器在这里不知道newTypeX的确切类型(即使之前已为它分配了int值)也是如此.尽一切可能,该变量也可以是双精度型.
为了获取Number变量的运行时类型,您可以例如使用getClass
方法:
System.out.println(newTypeX.getClass());
System.out.println(newTypeY.getClass());
与示例代码段一起使用时,将打印出
class java.lang.Integer class java.lang.Double