精华内容
下载资源
问答
  • 主要介绍了Java基本数据类型与封装类型详解(int和Integer区别) ,需要的朋友可以参考下
  • 主要介绍了Java中int和Integer区别文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • int Integer区别

    千次阅读 2018-12-15 23:51:16
    int Integer区别分析intIntegerint 与 Integer区别相同值下的 int Integer 的比较结果 分析 int int 是java的基本数据类型。 Integer Integer 继承了Object类,是对象类型,是 int 的包装类。 int 与 ...

    分析

    int

    int 是java的基本数据类型。
    

    Integer

    Integer 继承了Object类,是对象类型,是 int 的包装类。
    

    int 与 Integer 的区别

    1. 值的存储
      int 存储在栈中
      Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。
    2. 初始化
      int 初始化值为0。
      Integer 初始化值为null。
    3. 传参
      int 是值传递,栈中的数据不可变。
      Integer 对象是引用传递,引用不可变,但是引用指向的堆空间地址中的值是可以改变的。
    4. 泛型支持
      泛型不支持int,但是支持Integer。
    5. 运算
      int 可以直接做运算,是类的特性。
      Integer 的对象可以调用该类的方法,但是在拆箱之前不能进行运算,需要转化为基本类型int。

    相同值下的 int 和 Integer 的比较结果

    1. 两个通过new生成的变量,结果为false。
    2. int 和 Integer 的值比较,若两者的值相等,则为true。
      (注意:在比较时,Integer会自动拆箱为int类型,然后再做比较。)
    3. new 生成的Integer变量 和 非new 生成的Integer变量比较,,结果为false。
      (注意:new 生成的Integer变量的值在堆空间中,非new 生成的Integer变量的值在在常量池中。)
      (注意:非new生成的Integer变量,会先判断常量池中是否有该对象,若有则共享,若无则在常量池中放入该对象;也叫享元模式,后面再说。)
    4. 两个非new 生成的Integer对象比较,则结果为true。
      (注意:此处需要一个前提:值的范围在 -128 ~ 127 之间。
      涉及到java对 int 与 Integer 的自动装箱和拆箱的一种模式:享元模式—flyweight,为了加强对简单数字的重复利用。
      在赋值时,其实是执行了Integer的valueOf()方法。
      当值在 -128 ~ 127之间时,java会进行自动装箱,然后会对值进行缓存,如果下次再有相同的值,会直接在缓存中取出使用。缓存是通过Integer的内部类IntegerCache来完成的。
      当值超出此范围,会在堆中new出一个对象来存储。
      PS:自动装箱与拆箱是在JDK1.5中出现的。
    5. 内部类IntegerCache
      通过此类可以缓存简单数字。
      缓存的数大小可以由 -XX:AutoBoxCacheMax = 控制。
      jvm初始化时,java.lang.Integer.IntegerCache.high属性可以设置并保存在私有系统属性中。
      规定了low属性的值:-128
    展开全文
  • java int和Integer区别

    万次阅读 多人点赞 2019-05-12 11:13:40
    Integerint的包装类,int则是java的一种基本数据类型 Integer变量必须实例化后才能使用,而int变量不需要 Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据...

    1 区别

    • Integer是int的包装类,int则是java的一种基本数据类型
    • Integer变量必须实例化后才能使用,而int变量不需要
    • Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
    • Integer的默认值是null,int的默认值是0

    2 ==比较

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

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

    2.2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

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

    2.3、非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)

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

    2.4、对于两个非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
    

    对于第4条的原因:
    java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:

    public static Integer valueOf(int i){
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high){
            return IntegerCache.cache[i + (-IntegerCache.low)];
        }
        return new Integer(i);
    }
    

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

    3 延伸

    3.1、理解自动装箱、拆箱

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

    对于整数,javac替我们自动把装箱转换为Integer.valueOf(),把拆箱替换为Integer.intValue()。可以通过将代码编译后,再反编译加以证实。

    原则上,建议避免无意中的装箱、拆箱行为,尤其是在性能敏感的场合,创建10万个Java对象和10万个整数的开销可不是一个数量级的。当然请注意,只有确定你现在所处的场合是性能敏感的,才需要考虑上述问题。毕竟大多数的代码还是以开发效率为优先的。

    顺带说一下,在32位环境下,Integer对象占用内存16字节;在64位环境下则更大。

    3.2、值缓存

    就像上一讲谈到的String,Java也为Integer提供了值缓存。

    Integer i1 = 1;Integer i2 = Integer.valueOf(2);Integer i3 = new Integer(3);

    上述代码中第一行与第二行的写法取值使用了值缓存,而第三行的写法则没有利用值缓存。结合刚刚讲到的自动装箱、拆箱的知识,第一行代码用到的自动装箱,等价于调用了Integer.valueOf()。

    不仅仅是Integer,Java也为其它包装类提供了值缓存机制,包括Boolean、Byte、Short和Character等。但与String不同的是,默认都只会将绝对值较小的值放入缓存。以Integer为例,默认情况下只会缓存-128到127之间的值。当然如果你愿意也可以通过以下JVM参数进行设置:

    -XX:AutoBoxCacheMax=N

    3.3、原始类型操作线程安全吗?

    这个问题的正确答案是“线程不安全”,是否有些出乎你的意料?

    原始数据类型的变量,需要使用并发相关手段才能保证线程安全。特别的是,部分比较宽的数据类型,比如long、float、double,甚至不能保证更新操作的原子性,可能出现程序读取到只更新了一半数据位的数值!关于这个话题会在这个专栏后面的并发主题详细介绍。如果有线程安全的计算需要,建议考虑使用类似AtomicInteger、AtomicLong这样线程安全的类。

    展开全文
  • Java-int和Integer区别

    万次阅读 多人点赞 2019-05-05 22:46:57
    在说int和Integer区别之前,先要弄清楚两个问题: 一、java基本数据类型及其封装类 二、java自动拆箱自动装箱 一、java基本数据类型及其封装类 数据类型 字节大小 封装类 byte 8位 Byte short 16位 ...

    在说int和Integer的区别之前,先要弄清楚两个问题:
    一、java基本数据类型及其封装类
    二、java自动拆箱和自动装箱

    一、java基本数据类型及其封装类

    数据类型字节大小封装类
    byte8位Byte
    short16位Short
    int32位Interger
    long64位Long
    float32位Float
    double64位Double
    boolean1位Boolean

    java数据类型有基本数据类型和引用数据类型,为了方便将基本数据类型当作对象处理,java引入了基本数据类型相对应的封装类,如int封装类是Integer。

    二、java自动拆箱和自动装箱

    • 1、自动装箱
      自动装箱其实就是将基本数据类型转换为引用数据类型(对象)

    • 2、自动拆箱
      自动拆箱其实就是将引用数据类型转化为基本数据类型

    代码如下

        public static void main(String[] args) {
            Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1);
    
            int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1
            System.out.println(a);
            System.out.println(b);
        }
    

    打印结果

    1
    0
    

    三、int和Interger的区别

    从上面我们就能看出int和Interger的区别:

    • int是基本数据类型,Integer是引用数据类型;
    • int默认值是0,Integer默认值是null;
    • int类型直接存储数值,Integer需要实例化对象,指向对象的地址。

    说到这,是不是认为就这么完事了,其实它们之间还有一些细节方面的区别:如下

        public static void main(String[] args) {
            Integer a = new Integer(1);
            Integer b = new Integer(1);
    
            int c = 1;
            int d = 1;
    
            Integer e = 1;
            Integer f = 1;
            
            Integer g = 130;
            Integer h = 130;
            
            Integer i = new Integer(130);
            int j = 130;
        }
    
    • 1:a == b 吗? 废话,肯定不相等。两个new出来的对象地址不一样。
    • 2:c == d 吗? 这个也是废话,都是基本数据类型的值肯定相等。
    • 3:现在的关键问题是 e == f 吗? g == h 吗?
      答案是:e == f; g != h。为什么会出现这种情况?因为ava在进行编译时 Integer g = 130会被编译成 Integer.valueOf(130) ,这个可以通过反编译class文件看到。而通过Integer源码可以得出,Integer.valueOf() 方法会在数值-128~127之间会对Integer进行缓存,不会再重新new一个,所以 e==f ;当数值二大于127或者小于-128的时候则会重新new一个,所以g != h 。
      Integer的valueOf方法如下
        public static Integer valueOf(int i) {
             //IntegerCache.low == -128  ;IntegerCache.high == 127
             //当数值大于-128小于127时,进行缓存;否则重新new一个。
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
    
    • 4:c == e 吗, i == j 吗?
      答案都是相等的。因为封装类和基本数据类型进行比较的时候,java会自动拆箱,然后比较数值是 否相等。

    综上,我们可以得出几个结论:
    1、都是封装类,都是new出来的,肯定不相等。因为对象的内存地址不一样。
    2、都是封装类,都不是new出来的,如果值在-128~127之间,那就相等,否则不相等。
    3、如果是封装类和基本类型进行比较,只要数值相等那就相等,否则就不相等。因为封装类和基本数据类型进行比较的时候会有一个自动拆箱操作。
    4、都是基本数据类型,如果数值相等,那就相等;否则不相等。

    展开全文
  • 目录int和Integer区别int和Integer的比较有了int为什么还要有Integer补充:Integer的装箱拆箱 int和Integer区别 int是Java的基本数据类型,长度为32位(4)字节;Integer是Java提供的封装类,在java.lang....

    int和Integer的区别

    1. int是Java的基本数据类型,长度为32位(4)字节;Integer是Java提供的封装类,在java.lang.Integer包里面。
    2. int默认值为0;而Integer默认值是null。
    3. Integer是对象的引用,必须实例化后才能使用;int则不需要。
    4. new一个Integer实际是生成一个指针指向此对象;而int则是直接存储数据值。

    int和Integer的比较

    //1.Integer和int比较
    int i1 = 24;
    Integer i2 = 24;
    Integer i3 = new Integer(24);
    System.out.println(i1 == i2);//true
    System.out.println(i1 == i3);//true
    //Integer和int比较时,会自动拆箱为int,比较的是两个的值,所以为true
    
    //2.Integer和Integer比较
    Integer i4 = 100;
    Integer i5 = 100;
    System.out.println(i4 == i5);//true
    Integer i6 = 128;
    Integer i7 = 128;
    System.out.println(i6 == i7);//false
    //编译时翻译成:Integer i4 = Integer.valueOf(100);
    //如果两个变量的值在区间-128到127之间,则比较结果为true
    //如果两个变量的值不在此区间,则比较结果为false
    
    //3.Integer和 new Integer比较
    Integer i8 = 100;
    Integer i9 = new Integer(100);
    System.out.println(i8 == i9);//false
    //非new生成的Integer变量指向的是java常量池中的对象
    //new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同
    
    //4.new Integer和new integer比较
    Integer i10 = new Integer(1000);
    Integer i11 = new Integer(1000);
    System.out.println(i10 == i11);  //false
    //比较的是内存地址,所以不相等
    

    关于第二点需要补充说明,对于-128到127之间的数,程序会进行缓存,Integer i4 = 100时,会将100进行缓存,下次再写Integer i5 = 100时,就会直接从缓存中取,就不会new了。为什么会进行有范围的缓存,和valueOf()有关,可以看一下valueOf()的源代码

    public static Integer valueOf(int i){
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high){
            return IntegerCache.cache[i + (-IntegerCache.low)];
        }
        return new Integer(i);
    }
    

    有了int为什么还要有Integer

    1. 因为Java语言是面向对象的,对象封装可以把属性(数据跟处理这些数据的方法)结合在一起。比如Integer就有parseInt()等方法来专门处理int型相关的数据。
    2. 在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList和LinkedList集合类就只能以类作为它的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。

    补充:Integer的装箱和拆箱

    1. 自动装箱
      将基本数据类型转化为对象
    Integer i=100;
    //等价于Integer num = Integer.valueOf(100);
    
    1. 自动拆箱
      将对象转化为基本数据类型
    Integer i = 100;/ /声明一个Integer对象
    i++;// 进行计算时自动拆箱
    
    展开全文
  • int和Integer区别 1、Integerint的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此...
  • MySQL 中int和integer什么区别

    万次阅读 2019-02-22 19:05:39
    MySQL 中int和integer什么区别
  • java中intint和integer区别?

    千次阅读 2019-03-08 23:38:28
    intinteger区别从大的方面来说就是基本数据类型与其包装类的区别int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型复杂数据类型(包装类型): ...
  • hibernate里实体类用int和Integer区别

    千次阅读 2016-11-14 20:37:17
    所以hibernate实体建议用integer; 2、通过jdbc将实体存储到数据库的操作通过sql语句,基本数据类型可以直接存储,对象需要序列化存储。 3、在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理...
  • int和Integer有什么区别

    千次阅读 2018-07-26 20:37:38
     一、 int就是我们常说的java八大(primitive types : blooean、 byte 、 short 、 char 、int 、 float 、 double 、 long)原始数据类型之一。java虽然号称一切皆对象但是基本数据类型是例外。 【八种基本数据...
  • SQLite int integer区别

    千次阅读 2021-01-25 18:43:26
    INTEGER。有符号整数,存储在1、2、3、4、6或8个字节中.int不能设置主键自增。
  • int和Integer区别以及如何相互转化

    千次阅读 2020-09-26 14:02:48
    int和Integer区别 1、Integerint的包装类,int则是java的一种基本数据类型 。 2、Integer变量必须实例化后才能使用,而int变量不需要 。但由于有了自动装箱拆箱使得对Integer类也可使用:Integer i= 1; 3、...
  • intInteger区别及应用场景

    千次阅读 2020-01-06 20:21:25
    一、intInteger区别: 1、int属于基本数据类型,Integer属于int对应的包装类。 2、既然是类,就需要实例化才可以使用,而基本数据变量不需要。 3、Integer的默认值是null,而int的默认值是0 二、int与Integer的...
  • int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值值为0的区别int则无法表达出未赋值的情况,例如,要想表达出没有参加考试考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的...
  • 主要介绍了简单了解java中int和Integer区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Java基础之int和Integer有什么区别

    万次阅读 多人点赞 2016-12-26 17:47:03
    1 intInteger的基本使用对比 (1)Integerint的包装类;int是基本数据类型; (2)Integer变量必须实例化后才能使用;int变量不需要; (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接...
  • int和Integer区别 1、Integerint的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此...
  • Android面试 —int和Integer相等比较

    千次阅读 2019-04-11 15:35:47
    1.int类型和Integer比较相等(==),任何大小的都是true。 int类型只有“==”方式,所以比较的都是值大小。 2.(包装类型)equals比较相等,任何大小的都是true。 equals是包装类(引用类型)才有的,重写了Object的equals...
  • JAVA-int和Integer区别

    2012-05-25 21:27:24
    有一些基础东西真的还搞不清楚,看看这个文档int和Integer区别,个人感觉讲的比较通俗易懂,谢谢原创者!保存了
  • int和Integer区别

    千次阅读 2017-05-13 20:42:56
    int:属于简单类型,不存在“引用”这个概念;其数据是存储在栈空间中; Integer:属于继承自Object的类,是按照java存储对象的内存模型来存储的;引用存储在栈中,对象数据存储在堆中; 基于这个原理不同,所以在...
  • int和integer区别

    2018-10-19 16:38:17
    以前一直没有思考,为啥要有一个int还要有一个integer。 实际上: 1. Ingeter是int的包装类,int的初值为0,Ingeter的初值为null;... 但由于有了自动装箱拆箱使得对Integer类也可使用:Integer i= 1; ...
  • Integer和int区别

    万次阅读 多人点赞 2018-10-25 21:31:26
    Integerint的包装类, int是基本数据类型 最主要的区别就是这句 一个是基本数据类型, 一个是类, 但其实其中隐含的细节很多,比如: Integer的默认初始值是null,而int的默认初试值是0。 Integer变量必须先实例,...
  • 本篇文章小编为大家介绍,在Java中 关于int和Integer区别详解,需要的朋友参考下
  • 首先int和Integer是不一样的。 1、int是基本数据类型,Integer是包装类, 2、int则是直接存储数据值 ,Integer是对象的引用,(它有自己的内置方法) 3、Integer的默认值是null,int的默认值是0。 4、Integer 有...
  • int和integer有什么区别

    千次阅读 2019-08-02 14:04:02
    java为每一个基本数据类型都引入了对应的包装类型,int的包装类型就是integer import org.junit.Test; /* * 自动装箱 */ public class AutoUnboxingTest { public static void main(String [] args) { Integer a...
  • Java核心-07int和Integer有什么区别

    千次阅读 2019-06-02 16:33:46
    一.基本使用对比 int Integer 基本数据类型 包装类 速度快 速度慢 栈中 ...2.包装类Integer和基本数据类型int比较时,java会自动包装为int 3.非new生成的integer变量指向的是...
  • Java中int和integer区别

    2016-10-11 16:59:18
    intinteger区别从大的方面来说就是基本数据类型与其包装类的区别int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型复杂数据类型 int 是前者而...
  • 基本数据类型 类型 字节数 取值范围 byte 1 −27−27-2^7到27−127−12^7-1 short ... int 4 −231−231-2^31到231−1231−12^31-1 long 8 −263−263-2^63到263−1263−...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,668,215
精华内容 667,286
关键字:

int和integer的区别