转自:https://www.cnblogs.com/mmykdbc/p/8715646.html

Java的Integer和int有什么区别

Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下:

原始类型:boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

顺便一提,Java中的基本数据类型只有以上8个,除了基本类型(primitive type),剩下的都是引用类型(reference type)。

所以最基本的一点区别是:Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。除此之外还有区别,请看代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class TestInteger { 

    public static void main(String[] args) { 

        int i = 128

        Integer i2 = 128

        Integer i3 = new Integer(128); 

        System.out.println(i == i2); //Integer会自动拆箱为int,所以为true 

        System.out.println(i == i3); //true,理由同上 

        Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127); 

        Integer i5 = 127

        System.out.println(i4 == i5);//true 

        Integer i6 = 128

        Integer i7 = 128

        System.out.println(i6 == i7);//false 

        Integer i8 = new Integer(127); 

        System.out.println(i5 == i8); //false 

        Integer i9 = new Integer(128); 

        Integer i10 = new Integer(123); 

        System.out.println(i9 == i10);  //false 

    

  

为什么i4和i5比是true,而i6和i7比是false呢?关键就是看valueOf()函数了,这个函数对于-128到127之间的数,会进行缓存, Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以i4和i5比是true,而i6和i7比是false。

而对于后边的i5和i8,以及i9和i10,因为对象不一样,所以为false。

以上的情况总结如下:

1,无论如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。

2,两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。因为java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。

3,两个都是new出来的,都为false。还是内存地址不一样。

4,int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

Java-Integer和int有什么区别相关推荐

  1. Java Integer于Int 进行==双等于的内存比较时的一些问题说明

    转自: https://blog.csdn.net/xingkongdeasi/article/details/79618421 部分有所修改: 前言: 越是简单的东西,我们往往越是没有去把它明白,但 ...

  2. java integer int 比较_java Integer和int之间的比较问题是什么?

    展开全部 java Integer和int之间e68a84e8a2ad3231313335323631343130323136353331333365633864==的比较问题.求解释 public ...

  3. 二十八、Java中的Int和Integer的区别

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  4. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  5. 【Java】中int 和 Integer 与 new Integer() 的区别,int 可以使用 == 来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量值是否相等

    目录 一.int 和 Integer 的区别 二. Integer.new Integer() 和 int 的比较 三.总结 四.更多详看: 一.int 和 Integer 的区别 两者的区别主要体现 ...

  6. Java中Int、Integer、new Integer()之间的区别

    Java中有八种基本数据类型,Int是其中之一.而Integer是Int的封装,即Integer其实是一个对象.可以通过new来创建一个Integer对象,也可以直接将Int值赋给Integer变量. ...

  7. Java基础 - Integer和int的区别

    一.int和Integer的区别 两者的区别主要体现在以下几个方面: 1.数据类型不同:int 是基础数据类型,而 Integer 是包装数据类型: 2.默认值不同:int 的默认值是 0,而 Int ...

  8. java integer == int_Java中int和Integer的区别详解

    1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者>>integer 是后者(也就是一个类) 2.初始化时>> int i =1; Integer i= n ...

  9. Java基础:int与Integer区别

    int与Integer的基本使用对比 Integer是int的包装类:int是基本数据类型: Integer变量必须实例化后才能使用:int变量不需要: Integer实际是对象的引用,指向此new的 ...

最新文章

  1. sqlserver2000 php5.4,PHP添加Mssql/sqlserver2000扩展,适用于Php5.2/Php5.3/Php5.4
  2. Django自带的加密算法及加密模块
  3. Ceph 存储集群7-故障排除
  4. Scala特质可以继承Java类及限制特质的使用
  5. C++floyd warshall算法求最短路径(附完整源码)
  6. ubuntu下安装mysql 杂记
  7. 文石服务器维护,文石BOOX OS 2.0新系统即将上线,联合京东读书推出BOOX书城
  8. 图像超分辨率也能改善天气预报?没错!
  9. 快速安装Tensorflow
  10. 二值化区分前景和背景
  11. Public Key Retrieval is not allowed(已解决)
  12. Slam中几种变换的理解
  13. DX使用随笔--NavBarControl
  14. 固态硬盘系统经常假死_Win7固态硬盘假死卡顿解决方法
  15. Windows 7 安装VS2008 SP1 失败
  16. 用VBA下载google图片
  17. [全国十大城市火车票售票点、订票电话(买票再也不用去火车站排队)] – [旅游] – [校内论坛]
  18. 什么是业务模式、商业模式、经营模式、盈利模式和发展模式?
  19. VScode中使用platformIO开发,编译时找不到自己的源文件(报错信息:undefined reference to )
  20. 怎样在oblog中添加音乐播放器

热门文章

  1. orderquery.php,multiOrderQuery.php
  2. java异常错误的是,java 异常 错误处理
  3. flex布局怎么设置子元素大小_48张小图带你领略Flex 布局之美
  4. Python 模块(module)
  5. 计算机组成原理(三)--存储器的层次结构
  6. 多线程实战(二)线程同步
  7. iis配置write模块
  8. ASP.NET高级配置Web.config和Machine.Config
  9. 好用的chrome插件总结
  10. LeetCode(709)——转换成小写字母(JavaScript)