• Java面试题(1):详解int与Integer


    Java面试题(1):详解int与Integer

    int与Integer的区别

    • int是Java的基本数据类型之一,Integer是int的包装类

    • int直接再内存中储存值,Integer进行new操作,实际是生成了一个对象

    • int的默认值为0,Integer的默认值为null

    • Integer必须实例化(赋值)后才可以使用,而int无需实例化

    int与Integer的比较

    Integer i = new Integer(200);生成方式简称为new Integer

    Integer i = 200;生成方式简称为Integer

    1. int与int比较,数字一样为true

    2. int与Integer,int与new Integer比较,数值一样结果均为true

    // int与Integer,new Integer比较
    // int与Integer比较,Integer会自动拆箱为int
    int i1 = 200;
    //相当于Integer i2 = Integer.valueOf(200); //自动装箱
    Integer i2 = 200;
    Integer i3 = new Integer(200);
    //自动拆箱后和i1进行比较
    System.out.println(i1 == i2);	//true
    System.out.println(i1 == i3);	//true
    
    1. new Integer与new Integer比较,数字一样结果均为false
    //生成的对象在堆中是不同的对象,所以数值相同也为false
    Integer i1 = new Integer(200);
    Integer i2 = new Integer(200);
    System.out.println(i1 == 12);	//false
    
    1. 非new生成的Integer之间比较分两种情况:

    -128 <= i <= 127,非new生成的Integer之间比较数字相同时,结果为true

    Integer i1 = -128;
    Integer i2 = -128;
    System.out.println(i1 == i2);	//true
    

    i 不在这个区间内,非new生成的Integer之间比较数字相同时,结果为false

    Integer i1 = -129;
    Integer i2 = -129;
    System.out.println(i1 == i2);	//false
    
    1. new Integer与非new Integer比较,数值一样结果均为false

    非new Integer在-128~127中,会通过valueOf指向常量池中

    非new Integer不在-128~127中,相当于new Integer,是一个对象

    new Integer会指向堆中,均为对象,地址不同,所以均为false

    Integer i1 = 100;
    Integer i2 = new Integer(100);
    System.out.println(i1 ==i2);	//false
    

    知识点扫盲

    1. 自动装箱与自动拆箱

    自动拆箱:把包装类类型转换为基本类型

    自动装箱:把基本类型转换为包装类类型

    1. -128-127的特殊性

    i >= -128 并且 i <= 127 的时候,代码中的 if 条件成立,Integer i1 = 100,将 i 的值放入缓存中,Integer i2 = 100直接取缓存里面的数据,而不是重新创建一个Ingeter 对象,所以两个Integer i = 100相比为true;

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

    作者: Neumann97
    出处:https://www.cnblogs.com/dream-by-dream/p/13637628.html
    版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
    欢迎转载,转载请注明出处!


  • 相关阅读:
    MMORPG 游戏服务器端设计转载
    OpenFileMapping失败 原因ERROR_FILE_NOT_FOUND
    让程序在崩溃时体面的退出转
    [c\C++]线程函数的比较
    VS2005 2008 2010字体颜色配置方案
    用文件映射(File Mapping)实现进程间内存共享
    [Debug]通过LeakDiag查看内存泄漏
    线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点 转
    VC++ 中使用内存映射文件处理大文件
    透视投影
  • 原文地址:https://www.cnblogs.com/dream-by-dream/p/13637628.html
Copyright © 2020-2023  润新知