大家好,今天小编关注到一个比较有意思的话题,就是关于java语言装箱的问题,于是小编就整理了2个相关介绍Java语言装箱的解答,让我们一起看看吧。
j***a的基本数据类型有哪些?
J***a 的基本数据类型是 J***a 学习的基础,让我们看看 J***a 的基本数据类型都有哪些?
01. 基本数据类型
J***a 中一共有 8 种基本数据类型:
其中 boolean 比较特殊,在 j***a 规范中给出了 boolean 当做 int 处理(4 byte),boolean 数组用 byte 数组实现(1 byte)的定义,具体还要看虚拟机实现是否按照规范实现。
Integer x = 1; // 装箱:基本类型转包装类型,1 是 int 类型,调用了 Integer.valueOf(1)
int y = x; // 拆箱:包装类型转基本类型,调用了 x.intValue()
第一种类型:整数类型,它包括long、int、short、byte这四种类型,依次所占据的位数为64、32、16、8位,这样这四种类型在有符号数的前提下可表示的数据范围如下所示。
我们使用程序进行验证,可以证实我们的结论。其中使用到的Byte、Short、Integer与Long都是四种基本类型的封装类,这个我们后面再说。
接下来介绍字符类型。字符类型用char表示,在内存中占用两个字节即16位,用于存储英文、标点符号等字符,每个字符用一对单引号''引起来。在计算机中用不同的0、1组合表示不同的字符,于是有不同的编码。为了保证不同编码之间的编码冲突,J***a***用了Unicode编码,它为每一个字符确定了一个唯一的编码。
这样,从某种意义上讲,char字符也是一种特殊的整数类型。我们可以实现char与整数的自动转化。(在unicode中'a'用***表示)
接着介绍浮点类型float与双精度浮点类型double。float类型在内存中占据4个字节,表示范围大约在-3.4*10^38到3.4*10^38之间。double类型在内存中占据8个字节表示范围大约在-1.7*10^308到1.7*10^308之间。至于原因,涉及到浮点数在内存中表示,这里不再赘述,后面会详细解释。
J***a为什么要有泛型?
人吃任何东西的过程都一样,只是可吃的东西各种各样:把东西放进嘴里,在嘴里把东西用牙齿嚼碎,舌头和唾液搅拌下咽下去。有了泛型就可以用带了表示东西的这个泛型参数的人表达这个场景。这个泛型参数是水果,就是人吃水果。这个泛型参数是饭,就是人吃饭。这个泛型参数是菜,就是人吃菜。好处就是同一个人就可复用吃。
泛型即根据传入的参数不同返回不同的类型,比如返回给前端的是一个具体内容对象,我们就可以定义为泛型即具体内容可以传入不同的对象。
泛型的定义可以把某一相似的属性来接收不同的值。
j***a里的泛型是奇葩的存在。这也是我经常怼j***a的一个原因。
先说下泛型的主要作用:
1,强化类型安全,比如定义了一个List<String>,那么里面只能存放String,不允许存放其他类型(派生自String的除外)。类型安全应该在编译和运行时都能体现。
2,提高性能,减少类型转换和装箱拆箱次数。
再说下j***a泛型奇葩之处:
1,j***a泛型实现的原理叫类型擦除,不管代码中怎么定义泛型,编译后都变成object, 因此不能实现运行时的类型安全。 而且j***a编译器不够聪明,可以很容易骗过去。 举个例子,你调用了第三方的接口返回List<String>,但实际拿到的值里面可能跟String没有半毛钱关系。
2,既然类型被擦除,那么类型转换就不可避免了,因此使用泛型和非泛型在性能上没有任何变化。
到此,以上就是小编对于j***a语言装箱的问题就介绍到这了,希望介绍关于j***a语言装箱的2点解答对大家有用。