进来先做个题:

        Integer i1 = 10;Integer i2 = 10;Integer i3 = 128;Integer i4 = 128;Integer i5 = 118;Integer i6 = new Integer(10);Float f1 = 10.0f;Float f2 = 10.0f;System.out.println("i1 == i2 ? " + (i1 == i2));System.out.println("i3 == i4 ? " + (i3 == i4));System.out.println("i1 == i6 ? " + (i1 == i6));System.out.println("10 == i6 ? " + (10 == i6));System.out.println("129 == i3 ? " + (128 == i3));System.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5));System.out.println("128 == i2 + i5 ? " + (128 == i2 + i5));System.out.println("f1 == f2 ? " + (f1 == f2));System.out.println("10.0f == f2 ? " + (10.0f == f2));

答案是多少呢?暂且不谈,最后再公布。

基本类型与包装类的区别:

1.包装类型可以为null而基本类型不可以。

这点在pojo类里面很有用,因为在数据库里面定义的基本类型字段有可能值为null,
而这时如果将null赋值给基本类型属性就会报就会抛出 NullPointerException异常。
所以在与数据库交互的属性都应该定义为包装类型,除非明确的知道表中字段为非空字段。

2.包装类可以用于泛型,而基本类型不可以。

3.包装类型对象存储在堆中,基本类型存储在栈中

包装类型通过创建对象来存储数据,而对象是存储在jvm的堆中的,在栈中存储对象的引用,也就是对象所在堆中的地址。

基本类型在栈中存储的就是具体的数据,所以基本类型要比包装类型更加高效且节省空间。

4.自动装箱和自动拆箱

把基本类型转换为包装类型的的过程叫做装箱,把包装类型转换成基本类型的过程叫做拆箱。在Java SE5之后,java虚拟机会自动完成装拆箱的操作。

/* 自动装箱 当数值在-128 ~ 127 之间会调用静态的valueOf(int i)方法进行装箱,这是java虚拟机利用常量池技术默认创建了数值[-128,127] 的相应类型的缓存数据,返回的将是数值在常量池中的地址。当数值在这个范围之外才会去new一个对应类型的包装类*/
Integer i = 10; // 自动装箱,虚拟机将会自动转换成:Integer i = Integer.valueOf(10);Integer i = 128; // 自动装箱,虚拟机将会自动转换成:Integer i = new Integer(128);int j = i; // 自动拆箱,虚拟机将会自动转换成:int j = i.intValue();

包装类和常量池

Java 基本类型的包装类中Byte,Short,Integer,Long,Character,Boolean都实现了常量池技术。

  • Byte,Short,Integer,Long,包装类默认创建了数值[-128,127] 的相应类型的缓存数据。
  • Character创建了数值在[0,127]范围的缓存数据。
  • Boolean 直接返回True or False。

如果超出对应范围仍然会去创建新的对象。 

最后

这时候你是否已经知道答案了呢?

        Integer i1 = 10;Integer i2 = 10;Integer i3 = 128;Integer i4 = 128;Integer i5 = 118;Integer i6 = new Integer(10);Float f1 = 10.0f;Float f2 = 10.0f;System.out.println("i1 == i2 ? " + (i1 == i2)); // trueSystem.out.println("i3 == i4 ? " + (i3 == i4)); // falseSystem.out.println("i1 == i6 ? " + (i1 == i6)); // falseSystem.out.println("10 == i6 ? " + (10 == i6)); // trueSystem.out.println("129 == i3 ? " + (128 == i3)); // trueSystem.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5)); // trueSystem.out.println("128 == i2 + i5 ? " + (128 == i2 + i5)); // trueSystem.out.println("f1 == f2 ? " + (f1 == f2)); // falseSystem.out.println("10.0f == f2 ? " + (10.0f == f2)); // true

八种基本类型的包装类你真的懂了?相关推荐

  1. java单精度实型_Java的八种基本类型及其各种数据类型的相互转换

    一.八种基本类型 1.六种数字类型(四个整数型,两个浮点型) 字节型byte 8位-2^7到2^7短整型short 16位 整型int 32位 长整型long   64位 单精度float 32位   ...

  2. 【Java】浅析八种基本类型

    写作缘由 其实这些是最基本的东西了,但某个时刻可能还是会懵一下,特此梳理,强化基础. 基本数据类型 Java语言提供了八种基本类型.六种数值类型(四种整数型,两种浮点型),一种字符类型,还有一种布尔型 ...

  3. java八种基本数据类型及包装类详解

    详解一.八种基本数据类型常识 1.1.基本常识表 对于上图有以下几点需要注意: java八种基本数据类型分为四类八种,四类分别为整型.浮点型.布尔型.字符型:八种分别为byte.short.int.l ...

  4. JAVA中的八种基本类型

    一.JAVA中的八种基本类型 1.数字类型(6种)   ①byte:     占的位数:byte数据类型占八位: 最小值为:-128(-2^7): 最大值为:127(2^7-1): 默认值为:0: 作 ...

  5. java八种语言_Java语言八种基本类型

    Java语言八种基本类型 (2009-12-21 13:37:45) 标签: 杂谈 Java语言是一种严格的"类型化"语言.这意味着每个变量都必须有一个声明好的类型.Java语言提 ...

  6. java八种包装_Java的八种基本数据类型及其包装类

    Java有八种基本数据类型,所谓基本类型就是说存储时仅存在栈中,那么与之相对就是引用类型,引用类型既存在栈里又存在堆里,栈内存放堆内地址. 八种基本类型分别为byte short int long f ...

  7. Java八种基本类型基础

    Java语言提供了八种基本类型 八种基本数据类型其中包括整数型,浮点型,字符类型和布尔型. 整数型:byte,short,int,long 浮点型:float,double 布尔型:boolean 字 ...

  8. Java中八种基础类型

    Java中的八种基本数据类型 1.说来惭愧,已经是第二次有人面我关于Java中八种基本类型的问题了,我竟然还没有答出来. 逻辑型:boolean 字符型:char 整数型:byte,short,int ...

  9. 《性能调优之JVM》❤️04JVM常量池详解之深入理解Class常量池、运行时常量池、字符串常量池、八种基本数据类型的包装类和对象池

    JVM常量池详解 一.Class常量池 1.1字面量 1.2符号引用 二.运行时常量池 三.字符串常量池 3.1设计思想 3.2设计原理 3.3字符串常量池位置 3.4三种字符串操作 四.八种基本数据 ...

最新文章

  1. Spartan-6的时钟资源、全局时钟缓冲器/多路复用器
  2. JavaScript中Object.prototype.toString方法的原理
  3. Camtasia Studio 7 试用笔记
  4. 【未完待续】Git个人solo实际常用命令
  5. php中添加一个链接,使用php在推文中链接一个标签
  6. 对mysql进行压力测试_mysqlslap对mysql进行压力测试
  7. hdu5927Auxiliary Set
  8. mysql简单部署_Docker部署简单的mysql
  9. 文件读入简单操作(C#)
  10. Ps调色磨皮降噪抠图胶片特效模拟常用100款滤镜合集一键安装支持PSCC2015-2019win64
  11. mysql是bsd协议吗_五种开源协议(GPL,LGPL,BSD,MIT,Apache)介绍
  12. 动力节点_JDBC学习笔记详解【源代码分析】
  13. mkdir: Call From lzh/192.168.66.150 to localhost:9000 failed on connection exception:
  14. android修改图片(修改图片大小,图片旋转,图片平移)
  15. 使用tesseract识别图片中的文字
  16. 计算机和网络设备的辐射强,计算机网络设备信息辐射泄漏与抑制
  17. iOS 分析一次有意思的需求——HTML代码注入
  18. 微信小程序中,使用正则表达式,快速验证是否是数字(附正则表)
  19. IDEA中 配置 使用 SVN
  20. 深圳房地产投资-机会(写于2015.6月)

热门文章

  1. Web项目使用nginx实现代理端口访问,看这篇就够了
  2. git shanchu stash_git stash用法
  3. 2022-2028年中国氯磺化聚乙烯橡胶行业市场深度分析及未来趋势预测报告
  4. 【课堂笔记系列】二进制
  5. CUDA之nvidia-smi命令详解---gpu
  6. 第十六节,使用函数封装库tf.contrib.layers
  7. NLP.TM | GloVe模型及其Python实现
  8. TVM cmake示例展示
  9. HiCar基本功能介绍
  10. Minkowski修剪