java面试强基(4)
2023-06-13 09:13:11 时间
基本类型和包装类型的区别?
- 成员变量包装类型不赋值就是
null
,而基本类型有默认值且不是null
。(编译器报错,但能跑) - 包装类型可用于泛型,而基本类型不可以。
- 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被
static
修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。 - 相比于对象类型, 基本数据类型占用的空间非常小。
⚠注意 : 基本数据类型存放在栈中是一个常见的误区! 基本数据类型的成员变量如果没有被 static
修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。
int[] array=new int[]{1,2}; 由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中,
包装类型的缓存机制了解么?
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。
Byte
,Short
,Integer
,Long
这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character
创建了数值在 [0,127] 范围的缓存数据,Boolean
直接返回 True
or False
。
如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。
两种浮点数类型的包装类 Float
,Double
并没有实现缓存机制。
所有整型包装类对象之间值的比较,全部使用 equals 方法比较
机制:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128—-127的范围内,如果满足条件,则会从缓存(常量池)中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。
自动装箱与拆箱了解吗?原理是什么?
什么是自动拆装箱?
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
装箱其实就是调用了 包装类的valueOf()
方法,拆箱其实就是调用了 xxxValue()
方法。
因此,
Integer i = 10
等价于Integer i = Integer.valueOf(10)
int n = i
等价于int n = i.intValue()
;
注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。
从原理上可以看出,装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低
相关文章
- java除法保留两位小数_JAVA除法保留小数点后两位的两种方法
- fileinputstream java_Java FileInputStream close()方法
- java高级工程师面试情景题_Java高级工程师面试题III
- java 物理删除和逻辑删除
- 做了三年Java,java注释的三种形式
- java后端开发需要学什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java dom4j生成xml格式化_Java DOM4J方式生成XML的方法「建议收藏」
- 膜拜!阿里自爆十万字Java面试手抄本,脉脉一周狂转50w/次
- java io流面试_java面试核心知识点
- java 异或加密_Java异或技操作给任意的文件加密原理及使用详解
- Java面试集锦(一)之SpringCloud
- Java面试集锦(一)之Nginx
- Java实验课预约系统网站源码
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day01】——Java基础篇
- Java环境安装
- 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
- Java实现打字练习的代码详解编程语言
- Java基本数据类型总结二详解编程语言
- eeOracle放弃Java EE:梦想的终结(oracle放弃java)
- 面试前准备:Java技术和Redis快速入门(java面试redis)
- 让Java桥接Linux新世界的重要性(java链接linux)
- Java实现:服务端登录系统并跳转到系统内的指定页面(不调用浏览器)详解编程语言
- 在Linux环境下轻松搭建Java开发环境(linux下搭建java)
- Java与Oracle 一种天生的结合(java属于oracle)
- 客户端Java客户端快速关闭Redis连接(关闭redis的java)
- Redis无法与Java建立连接(redis连不上java)
- java调用淘宝api联网查询ip归属地