java中 int 比较_java中Integer与int的种种比较你知道多少?
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。
package com.test;
/** * *@author 小光光 * */
public class TestInteger {
/** *@param args */
public static void main(String[] args) {
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
//Integer会自动拆箱为int,所以为true
System.out.println(i == i2);
System.out.println(i == i3);
System.out.println("**************");
Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);
Integer i6 = 127;
System.out.println(i5 == i6);//true
/*Integer i5 = 128; Integer i6 = 128; System.out.println(i5 == i6);//false */ Integer ii5 = new Integer(127);
System.out.println(i5 == ii5); //false
Integer i7 = new Integer(128);
Integer i8 = new Integer(123);
System.out.println(i7 == i8); //false
}
}
首先,17行和18行输出结果都为true,因为Integer和int比都会自动拆箱(jdk1.5以上)。
22行的结果为true,而25行则为false,很多人都不动为什么。其实java在编译Integer i5 = 127的时候,被翻译成-> Integer i5 = Integer.valueOf(127);所以关键就是看valueOf()函数了。只要看看valueOf()函数的源码就会明白了。JDK源码的valueOf函数式这样的:
public static Integer valueOf(int i) {
2 assert IntegerCache.high >= 127;
3 if (i >= IntegerCache.low && i <= IntegerCache.high)
4 return IntegerCache.cache[i + (-IntegerCache.low)];
5 return new Integer(i);
6 }
看一下源码大家都会明白,对于-128到127之间的数,会进行缓存,Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以22行的结果为true,而25行为false。
对于27行和30行,因为对象不一样,所以为false。
我对于以上的情况总结如下:
①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
如果大家觉得有什么不对的地方,欢迎指示。
java中 int 比较_java中Integer与int的种种比较你知道多少?相关推荐
- i10在java中什么意思啊_Java的Integer和int有什么區別
Java是面向對象的編程語言,一切都是對象,但是為了編程的方便還是引入了基本數據類型,為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper cla ...
- java大string排序_java中字符串排序,String 转化为int比较大小
引入题目 题目描述 设有nnn个正整数(n≤20)(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 ...
- java int 无穷小_JAVA中令人眼花撩乱的数字魔法
五月的深圳空气中弥漫起初夏的味道,淡淡的,暖暖的.春日里不太张扬的阳光也掺入这股气息...(烟哥好文采!) 这天,烟哥愉快的喝着霸气芝士莓莓莓.一边东张西望,寻找着可以装13的机会.一切正如下面这张图 ...
- java int 十六进制_java中int使用十六进制
在int类型中,进制的使用有十进制和十六进制的方法.在选择上很多人都有所困惑,不知道哪一种进制更好用.就位运算更加直观的表现出来而言,还是推荐使用十六进制.下面我们就十六进制的好处进行分析,同时以十六 ...
- Java实现float转换成int代码_Java中如何将float转换为long或int?(附代码)
本篇文章给大家带来的内容是关于Java中如何将float转换为long或int?(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在Java中,有三种方法可以将float转换 ...
- java byte转int原理_java中int与byte数组互转代码详细分析
在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...
- java comparable接口作用_Java 中 Comparable 接口的意义和用法
一, 为何需要实现Comparable接口 我们知道Collections类中包含很多对实现Collection接口的容器各种操作的静态方法. 当然, 其中最长用的莫过于排序了(Collections ...
- java中有没有栈_Java中堆和栈有什么区别
stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...
- java包装器类_Java中的基本类型和包装类
Java中基本数据类型与包装类型有 基本类型 包装器类型 boolean Boolean char Character int Integer byte Byte short Short long L ...
最新文章
- 2022-2028年中国氢化环氧树脂产业发展动态及投资趋势预测报告
- C/S架构应用程序开发培训笔记
- matlab三角形旋转动态,新手向!用WebGL写一个旋转的动态三角形,总共分三步!!(注释超详细!!)...
- 分享你的见解与经验|RocketMQ Summit 2022 议题征集中
- python小细节之else
- #22. 【UR #1】外星人
- 使用Istio进行多集群部署管理:单控制平面 Gateway 连接拓扑
- 快速删除从CSDN复制的代码行前的数字的方法
- vmware虚机无法重启关机的强制处理办法
- python 帮助 help
- CSDN有奖任务答案
- P2010 [NOIP2016 普及组] 回文日期
- 库存进销存出入库销售mysql表结构_进销存数据库表结构设计.doc
- 【Linux系列文章】软件包管理
- hypothesisTest
- 文本分词并统计出现次数最高的几个词Python
- 斯塔克尔伯格竞争模型
- 跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利
- Oulipo(欧力波)(经典kmp模板题) HDU-1686
- PS如何给白衬衫换色