浅谈Java的 int 和 Integer 的区别

1.基础概念:

int是我们常说的整型数字,是Java的8个原始数据类型之一。Java语言虽然号称一切都是对象,但原始数据类型是例外。

Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、int和字符串之间转换等。在Java 5中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java可以根据上下文,自动进行转换,极大地简化了相关编程。

注:自动装箱与拆箱实际上算是一种“语法糖”。所谓语法糖,可简单理解为Java平台为我们自动进行了一些转换,保证不同的写法在运行时等价。因此它们是发生在编译阶段的,也就是说生成的字节码是一致的。

2.主要区别:

Integer是int的包装类,现在最新的J,int则是java的一种基本数据类型.

Integer变量必须实例化后才能使用,而int变量不需要.

Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值.

Integer的默认值是null,int的默认值是0.

3.应用中的一些特性:

a.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false

b.但如果是int 和 interger对比的话,系统会默认我们对比的是值而非内存地址:

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true

c. new Integer(100)生成的变量指向堆中新建的对象,而直接声明的指向的是java常量池中的对象,所以指向的地址不同(同为interger就对比地址而非指,因为interger属于类(包装类)

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false

d.对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false

这是因为 Java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

所以说因为128不会被缓存而是直接新建的对象,所以说存储的地址是不同的。

引用:

https://blog.csdn.net/zjfahs/article/details/90138277

https://blog.csdn.net/weixin_39793752/article/details/80951220

原文地址:https://www.cnblogs.com/cptCarlvon/p/12672081.html

时间: 2024-08-29 05:22:31

浅谈Java的 int 和 Integer 的区别的相关文章

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

java 中int与integer的区别

int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1:Integer i= new Integer(1);(要把integer 当做一个类看):但由于有了自动装

java中int 和 Integer的区别

要想搞清楚int和integer的区别,需要先搞清楚什么叫包装类. 虽然 Java 语言是典型的面向对象编程语言,但其中的 8 种基本数据类型并不支持面向对象的编程机制,基本类型的数据不具备“对象”的特性--不携带属性.没有方法可调用.沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单.有效地进行常规数据处理.这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了Object 类的特性,要转换为 String 类型时只要简单调用 Object 类中定义的 toString()

Java教程——int与Integer的区别

首先说一下int和Integer的区别: int 是基本数据类型,Integer是int的包装类.注意:后者的类型是"类".例如使用泛型,List<Integer> numList; int初值0,integer是null. 下面看具体例子: 1 package syswar.cc; 2 3 public class IntegerCompare { 4 5 public static void main(String[] args) { 6 // TODO Auto-ge

java中int和integer的区别

int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果

java里int和Integer什么区别

Integer i=0; i是一个对象 int i=3; i是一个基础变量 Integer i=0; 这种写法如果没记错,在JAVA1.5之前是会报错的,自动的加解包是1.5的新特性 必须写成 Integer i= new Integer(0); i.intValue()才能提取i的值 使用场合,例如说往ArrayList里面add,必须add的是Object而int不是对象,就只能把Integer添加进去. 在Java中要处理的东西几乎都是对象,而基本数据类型(如int,double等定义的变

浅谈Java等软件和嵌入式的区别,给你明确一个方向

目前在中国从事it行业的人可谓是多不可数,那么作为it男的你又该如何发展?一:IT软件开发眼前道路的选择 一份工作在一个人的生活中占据重要地位,对于一个人的生活质量占据决定性作用,可以说工作决定一个人一生,对于选择工作当然是要选择新兴产业且有发展前途的行业,那么在IT技术领域,选择多年流行.目前市场基本饱和的JAVA还是目前市场上新兴.前沿.国家扶持重视的嵌入式好?下面我们就来了解一下IT技术领域中JAVA开发与嵌入式开发的特点.现状及未来. 二:JAVA开发的应用及特点 JAVA在中国发展已1

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初