integral和integrated区别,intergrate

原始数据类型有8种

让我们先复习一下我们学到的东西

int :基本数据类型,不声明而直接使用

interger:int的包类。 虽然需要声明,但JAVA提供了自动将抽象为类、new中的一个对象的箱子拆开的功能,以便可以像int一样自由赋值

interger的值缓存,java5提供静态工厂方法valueof

但是,由于valueof的限制,调用缓存机制,interger取的值范围为-128—127,只能在此范围内进行比较

问题1:编译阶段、运行时,自动装箱/自动拆箱是发生在什么阶段?

自动装箱和开箱其实是语法糖,Java平台为了保证编译时生成的字节码一致,自动进行了转换。

javac自动调用Interger.valueOf ,Interger.intValue )装箱,装箱时调用方法,肯定也应用到了缓存机制中

问题2:使用静态工厂方法valueof会使用缓存机制,那么自动装箱的时候,缓存机制其作用吗?

前面的问题已经回答了

缓存机制不仅包含interger,还包含其他基本类型的软件包类。

例如,对于1.Boolean,将缓存启用true/false的实例。 确切地说,只返回两个常量实例Boolean.TRUE/FALSE

2.Short,同样缓存了-128—127之间的数值

3.Byte的数值有限,所以全部被缓存

4.Character,缓存范围’\ u 0000’—’_ 007 f’

自动装箱和开箱很酷,有什么需要注意的吗?

原则上,尽量避免无意识的开箱。 特别是对性能敏感的情况下,创建10万个java对象比创建10万个整数更高级,而且内存消耗和处理时间都更慢

问题3:为什么我们需要原始数据类型,Java的对象似乎也很高效,应用中具体会产生哪些差异?

使用原始数据类型、数组甚至本地代码实现。 在性能极为敏感的场景中,替换包类、动态数组

问题4:阅读过Interger源码吗?分析下类或者某些方法的设计要点

interger的缺省缓存值为-128-127,但您也可以根据需要调整代码。

-XX:AutoBoxCacheMax=N

所有这些都出现在java.lang.Interger静态代码的初始块中

包类如**Interger )定义了常量如SIZE和BYTES )。 **之所以会考虑这样的设计,是因为32位和64位中的JDK不需要移植。

原始类型线程安全

java原始数据类型和引用类型局限性

原始数据类型不能与泛型类型一起使用

java中的所有对象都是引用类型。 对于原始数据类型数组,它是内存中的连续内存;而对于对象数组,它往往分布在存储堆栈的不同位置。 这样的设计非常灵活,但会带来数据操作的低效率。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注