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 国际」知识共享许可协议进行许可。

欢迎转载,转载请注明出处!


Java面试题(1):详解int与Integer的更多相关文章

  1. java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...

  2. 《Java面试全解析》1000道面试题大全详解(转)

    <Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃 ...

  3. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  4. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  5. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  6. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  7. (转)java.util.Scanner应用详解

    java.util.Scanner应用详解   java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...

  8. java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock

    原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...

  9. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系

    本文关键词: java continue break 关键字 详解 区别  用法 标记  标签 使用 示例 联系   跳出循环 带标签的continue和break 嵌套循环  深入continue ...

随机推荐

  1. GitLab 配置模板

    GitLab 配置模板 GitLab 使用模板和参数生成配置文件. 一般来说,我们会通过 gitlab.rb 文件修改配置,例如 Nginx 相关配置. gitlab.rb 只能使用特定的几个 Ngi ...

  2. vue scss 样式穿透

    使用2个style的方式不够优雅,可以使用下面方式做样式穿透 .normal-field /deep/ .el-form-item { margin-bottom: 0px; } .normal-fi ...

  3. 在虚拟机中安装Mysql

    目录 下载Mysql 安装 配置mysql允许远程访问 下载Mysql 下载地址:http://dev.mysql.com/downloads/mysql 我这里下载的是安装版本 安装 配置mysql ...

  4. 串口线接Linux设备U盘安装系统和直接安装设备接显示屏2种方式不同

    Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x22 (or lat ...

  5. L1-006 连续因子 天梯

    思路: 素数只有1和本身 合数 暴力枚举 把连续因子最大的记录下来 注意: AC代码 //思路: //素数只有1和本身 //合数 暴力枚举 把连续因子最大的记录下来 #include<iostr ...

  6. 第二章 Kuberbetes实践指南

    kubernetes安装与配置 网络,安全,服务启动配置 参考: kubernetes权威指南第二版 kubectl命令行工具用法详解 kubectl [command] [type] [name] ...

  7. API、Win32 SDK、Win32项目、MFC、Windows窗体应用程序的区别

    [原]API.Win32 SDK.Win32项目.MFC.Windows窗体应用程序的区别 首先来看一下每一个术语的定义: API:Application Programming Interface. ...

  8. 目录扫描、Nmap

    一.基本定义 1.目录扫描: 扫描站点的目录,寻找敏感文件(目录名.探针文件.后台.robots.txt.备份文件等). 2.目录:站点结构,权限控制不严格. 3.探针文件:服务器配置信息,例:php ...

  9. 第8章 Spark SQL实战

    第8章 Spark SQL实战 8.1 数据说明 数据集是货品交易数据集. 每个订单可能包含多个货品,每个订单可以产生多次交易,不同的货品有不同的单价. 8.2 加载数据 tbStock: scala ...

  10. CSP-J2019 NOIP普及组初赛真题(阅读程序部分)

    阅读程序(程序输入不超过数组或字符串定义的范围:判断题正确填√,错误填×:除特殊说明外,判断题1.5分,选择题3分,共计40分) #include <cstdio> #include &l ...