傻傻分不清?Integer、new Integer() 和 int 的面试题

简介: 傻傻分不清?Integer、new Integer() 和 int 的面试题

image.png这篇有意思:IntegerCache的妙用和陷阱!


基本概念的区分:

1、Integer 是 int 的包装类,int 则是 java 的一种基本数据类型

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

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

4、Integer的默认值是null,int的默认值是0


Integer、new Integer() 和 int 的比较

1、两个 new Integer() 变量比较 ,永远是 false

因为new生成的是两个对象,其内存地址不同image.png分析:

Integer i = 100 在编译时,会翻译成为 Integer i = Integer.valueOf(100),而 java 对 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了。


4、 int 变量 与 Integer、 new Integer() 比较时,只要两个的值是相等,则为true

因为包装类Integer 和 基本数据类型int 比较时,java会自动拆包装为int ,然后进行比较,实际上就变为两个int变量的比较。

image.pngimage.pngimage.png解析:

i01 == i02 。 i01.intValue()i02 两个值的比较5959 -->true;


i01 == i03 。 由于 59在-128到127之间,所以,i01和i03的赋值操作返回的是同一个对象。都是从chche中返回的同一个对象,对象地址相同 true;


i03 == i04。 i03是来自缓存值,i04是新new的对象 ,二者不是同一个对象,所以false。


i02 == i04。 和第一个类似,true。


答案是 C 。


示例4:

与示例3的唯一不同,就是将值全部改成128。image.png推荐去我的博客阅读更多:


1.Java JVM、集合、多线程、新特性系列教程


2.Spring MVC、Spring Boot、Spring Cloud 系列教程


3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程


4.Java、后端、架构、阿里巴巴等大厂最新面试题


生活很美好,明天见~


image.png

相关文章
|
19天前
|
缓存
【面试知识点】关于Integer和Int的比较
【面试知识点】关于Integer和Int的比较
|
11天前
|
缓存 安全 Java
Java的Integer和int有什么区别?
Java的Integer和int有什么区别?
12 1
|
13天前
|
编译器 程序员 C语言
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(下)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
8 0
|
13天前
|
编译器 C语言 C++
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(中)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
26 0
|
13天前
|
存储 程序员 编译器
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(上)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
21 0
|
17天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
19天前
|
存储 Java API
使用Integer而不是int的场景和优势解析
使用Integer而不是int的场景和优势解析
61 0
|
19天前
|
算法 Java C++
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
17 0
|
8月前
|
Java 编译器
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
|
8月前
|
存储 缓存 Java
【Java】int和Integer的区别?为什么有包装类?
【Java】int和Integer的区别?为什么有包装类?