int与Integer区别+Integer类详解
//Integer范围-128~127
//Integer与Integer比较
Integer a_127 = 127;
Integer b_127 = 127;
Integer c_new_127 = new Integer(127);
//编译a_127=127时,被翻译成Integer a_127=Integer.valueOf(127)
//而在valueOf()的源码中,对于-128~127之间的数,会进行缓存,即Integer a_127=127时,会将127进行缓存,下次再写Integer b_127=127时,则会直接从缓存中取,就不会new了
//所以a_127==b_127结果为true,而a_128==b_128结果为false
System.out.println(a_127 == b_127);//true
//因为c_new_127新建了一个对象,所以这里两个对象相比较,当然不一样
System.out.println(a_127 == c_new_127);//注意:false
Integer a_128 = 128;
Integer b_128 = 128;
System.out.println(a_128 == b_128);//注意:false
Integer a_new_128 = new Integer(128);
Integer b_new_128 = new Integer(128);
//两个new出来的对象进行比较,一定为false
System.out.println(a_new_128 == b_new_128);//注意:false
System.out.println(a_128 == a_new_128);//注意:false
//int与int比较
int i_127 = 127;
int n_127 = 127;
System.out.println(i_127 == n_127);//true
int i_128 = 128;
int n_128 = 128;
System.out.println(i_128 == n_128);//true
//Integer与int比较
//Integer与int比较时,Integer会自动拆箱为int
System.out.println(a_127 == i_127);//true
System.out.println(c_new_127 == i_127);//true
System.out.println(a_128 == i_128);//注意:true
System.out.println(a_new_128 == i_128);//注意:true
Integer.valueOf()的源码如下:
//IntegerCache.low=-128;IntegerCache.high=127
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Integer和int的区别:
1.Integer是int的包装类,int的初值为0,Integer的初值为null。
2.无论值是否相同,Integer与new Integer都不会相等,结果为false。
情况一:Integer范围在-128~127之间,指向专门存放它的常量池;new Integer引用指向堆。它们的内存地址不一样,所以无论值是否相同,比较结果都为false。
情况二:Integer范围不在-128~127之间,编译时Integer.valueOf()返回的是new Integer();而new Integer引用指向堆。这样两者是两个不同的堆栈对象,无论堆上的值是否相同,引用地址不同,比较结果都为false。
情况三:两个Integer范围都不在-128~127之间,则依然是两个new Integer对象,则比较结果为false。
3.两个都是非new出来的Integer,如果数在-128~127之间,值相同则为true,否则为false。原因:java在编译Integer时,会翻译成Integer i = Integer.valueOf(),而valueOf()会对-128~127之间的数进行缓存。
4.两个都是new出来的,无论堆上的值是否相同,引用地址不同,结果为false。
5.int和Integer比,无论Integer是new出来的还是-128~127范围之外的,值相同则为true,否则为false。原因:Integer会自动拆箱为int再比较。
Integer类:
字段:
MAX_VALUE
值为 231-1 的常量,它表示 int 类型能够表示的最大值。
MIN_VALUE
值为 -231 的常量,它表示 int 类型能够表示的最小值。
SIZE
用来以二进制补码形式表示 int 值的比特位数。
TYPE
表示基本类型 int 的 Class 实例。
构造方法:
Integer(int value)
构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s)
构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
方法:
bitCount(int i)
返回指定 int 值的二进制补码表示形式的 1 位的数量。
compareTo(Integer anotherInteger)
在数字上比较两个 Integer 对象。
doubleValue() 【int,long,float,short】
以 double 类型返回该 Integer 的值。
parseInt(String s)
将字符串参数作为有符号的十进制整数进行解析。
parseInt(String s, int radix)
使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
toBinaryString(int i)
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
toHexString(int i)
以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
toOctalString(int i)
以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
valueOf(int i)
返回一个表示指定的 int 值的 Integer 实例。
valueOf(String s)
返回保存指定的 String 的值的 Integer 对象。
valueOf(String s, int radix)
返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
reverse(int i)
返回通过反转指定 int 值的二进制补码表示形式中位的顺序而获得的值。
reverseBytes(int i)
返回通过反转指定 int 值的二进制补码表示形式中字节的顺序而获得的值。
int与Integer区别+Integer类详解的更多相关文章
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- thread 类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- JDK中Unsafe类详解
Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...
- Java基础-DBCP连接池(BasicDataSource类)详解
Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...
- Java 枚举类详解
1. 枚举类定义 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象,这种实例有限而且固定的类,在Java里被称为枚举类. 2. 早期实现枚举的方式 public static f ...
- java的ReentrantLock类详解
ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
随机推荐
- 机器学习笔记(一)—— 线性回归问题与Matlab求解
给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...
- 【文件处理】xml 文件 SAX解析
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档 ...
- android gradle 给所有的buildFlavor 的versionName 增加一个后缀
build里面有很多的productFlavors,我想要给所有的productFlavors 的versionName增加一个后缀比如:_20180323 怎么做?注意是所有的productFlav ...
- 直接插入排序&希尔排序
1.直接插入排序 时间复杂度O(n2) 工作原理: 通过构建有序序列,对于未排序数据,在已排序的序列中,从后向前扫描,找到相应的位置并插入. 插入排序在实现上,在从后向前扫描的过程中,需要反复把已排序 ...
- iOS Crash 分析 符号化崩溃日志
参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhack ...
- linux下vi的复制,黏贴,删除,撤销,跳转等命令-费元星
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式vi编辑器有3种模式:命令模式.输入模式.末行模式. ...
- 很全的 Python 面试题
很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子: Python 1 2 3 4 5 a = 1 def fun(a): ...
- FMDB的线程安全
最近面试被问到FMDB的多线程处理问题,因为之前项目中是移植别人的代码,没有踩过这里的坑. 问题: 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finaliz ...
- JMeter学习笔记(七) 导出文件接口测试
导出文件接口,其实跟下载文件接口的测试类似,主要就是执行接口导出文件后保存到本地. 下载文件接口测试,参考文档:https://www.cnblogs.com/xiaoyu2018/p/1017830 ...
- msql 数据库介绍和启动
什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但 ...