Java基础类型与包装类型

面试问题:

包装类型及基础类型的区别?既然已经有包装类型为什么还需要基础类型?

第一个问题:

  1. 基础类型可以通过定义变量名后直接创建并赋值,包装类型则需要通过new关键字进行对象创建及初始化
  2. 基础类型之间赋值进行的是栈间地址引用的传递,意味着值相同则地址相同,两者equals为true。但是包装类型则有些区别,区别在于部分包装类型(Integer/Char/Long/Short/Byte)有cache机制,有些(Double/Float)始终通过new新建对象,有的(Boolean)始终调用同一个静态变量。通过上述可知在cache范围内或者调用静态变量的话equals为true,其他的虽然值相同但是地址不相同,equals为false
  3. 在基础类型和包装类型混用的情况下存在自动拆箱、装箱操作
  4. 包装类型的初始值为null,而基础类型拥有固定的初始值,比如:int为0
  5. 包装类型拥有操作相关类型的一些方法,能够为开发者提供便捷。但是基础类型并没有,这也是Java面向对象设计的这么一个体现,只有对象才有特定的动作(方法)
  6. 基本类型存放在栈内存中,包装类型存放在堆内存中。栈内存的操作快于堆内存,这也是对于下一个问题的一个解释
  7. 集合类中能够使用的均为包装类型

第二个问题(个人浅见):

  1. Java的设计理念为万物皆可为对象,所以在设计角度上为基础类型设置自己的包装类型是完善Java设计理念的一个操作
  2. 个人认为,在使用基础类型及包装类型的时候需要分情况考虑。比如:本人在编写类静态变量的时候用基础数据类型偏多。因为在使用的过程中更多的对于代码中魔法值的处理,更需要的是在寻址上的效率。基本类型放在栈内存中比包装类型提升了使用中查找变量内存地址的效率。但是在类函数中更多用的是包装类型,因为在函数中可能用到了基础类型的转换及比对,在这种时候需要使用包装类型自带的函数,而且减少在基础类型和包装类型混合使用时的拆箱、封箱的操作时间

猜你喜欢

转载自blog.csdn.net/weixin_42505381/article/details/128229279