首页 > TAG信息列表 > IntegerCache

Integer 比较 == 要慎用

Integer 是包装类 ,在使用的时候会拆箱。Integer.valueOf 点击查看代码 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(

JAVA中的Integer对象大小比较100等于100,1000不等于1000

integer源码中的方法valueOf()做了一个条件判断,其中IntegerCache.low的值为-128,IntegerCache.higth的值为127 也就是说目标值在-128~127中会直接从cache数组中读取值,否则会创建新的对象。 为什么默认值在-128~127之间 JAVA api中说-128~127之间数据在int范围内时频繁使最高的,为了减

研读源码很重要

今天碰巧遇到个问题    研读了源码后,发现,Integer类中有个内部类, 用100定义两个包装类型的变量a,b后,包装类型用==比较的是对象的内存地址, IntegerCache,这个类对-127到128范围内的数字做了缓存,也就是说这范围内的数字的内存地址是一样的, 所以返回true超出这个范围后,相同的值1000,定

int 和 Integer的区别

问题:int 和 Integer 有什么区别,Integer的值缓存范围? 一、int 和 Integer 的基本对比 int 是基本数据类型,直接存数值,进行初始化时 int 类的变量初始值为 0 ; Integer 是对象,用一个引用指向这个对象,Integer 的变量初始化值为 null 。 如下代码:   ArrayList a = new ArrayList();in

[Java基础&进阶] Java 装箱拆箱

Integer i1 = 100; //自动装箱 Integer i2 = 100; Integer i5 = Integer.valueOf("100"); Integer i3 = 128; Integer i4 = 128; System.out.println(i1 == i2); System.out.println(i2 == i5); System.out.println(i3 == i4); 结果如下所示: true true false 这里自动调用

java基础之128陷阱

要理解什么是java中的128陷阱,我们需要先来看下下面这段代码: public class Demo { public static void main(String [] args) { Integer a = 127; Integer b = 127; System.out.println(a==b); } } 运行后发现结果是true。 但如果我们让两个变量的值为128,再来执行这

拆箱与装箱的一些注意事项(Integer -128~127 的恩怨)

public class Main {     public static void main(String[] args) {               Integer a = 100;             Integer b = 100;             Integer c = 128;             Integer d = 128;     

Java Integer对象的比较及自动装箱和自动拆箱过程

1、首先介绍一下自动装箱和自动拆箱过程, 自动装箱,就是把基本数据类型用他们对应的引用类型包装起来,使他们可以具有对象的特质。例如我们可以把int类型包装成Integer类型的,把double类型的包装成Double类型的。 自动拆箱,就是进行与自动装箱相反的操作。 自动装箱的过程:当需要

Integer-源码

Integer 是java5 引进的新特性 先上一个小实验: public static void main(String[] args) { Integer a1 = 100; Integer a2 = 100; System.out.println(a1 == a2); Integer b1 = 1000; Integer b2 = 1000; System.out.println(

关于Integer和int的比较 存储位置 jvm 自动拆装箱

1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。 Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j); //false 2、Integer变量和int变量比

IntegerCache的妙用和陷阱!

考虑下面的小程序,你认为会输出为什么结果? public class Test {     public static void main(String\[\] args) {         Integer n1 = 123;         Integer n2 = 123;         Integer n3 = 128;         Integer n4 = 128;         System.out.pr

浅聊Integer的缓存

有一道常见的面试题,如下 public static void main(String[] args) { Integer a = 128; Integer b = 128; Integer c = 100; Integer d = 100; System.out.println(a == b); //false System.out.println(c == d); //true } 为什么会导致这样的结果呢

java学习——基础入门(1)

本文为学习笔记,留作自用,不会记载的特别详细,如有错误,欢迎指正   1. 关于java中常用数据类型的长度 byte/1,char/2(因为java用的是Unicode编码,固定为2字节),short/2, int/4(当时大多数系统为32位系统,涉及到组原和操作系统相关知识,4字节有助于加快计算速度), float/4,long/8.double/8  

java装箱和拆箱的区别

装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法。拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int);调用方法:Integer的intValue方法。 Integer x = 2; // 装箱 调用了 Integer.valueOf(2) int y = x; //

JAVA常用类--包装类

Java常用类整理 包装类Integer_Number自动装箱和拆箱包装类的缓存问题 包装类 Integer_Number public class Test1 { public static void main(String[] args) { //基本数据类型转换成包装类对象 Integer a = new Integer(3); Integer b =

Java开发手册——【强制】所有整型包装类对象之间值的比较,全部使用 equals 方法比较

Java开发手册说明: 对于 Integer var = ? 在-128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行

StringBuffer和 StringBuilder和包装类

StringBuffer和 StringBuilder StringBuffer :可变长字符串,运行效率慢、线程安全 append()方法 追加 insert(int, String) 添加,可以在任意地方 replace(int start, int end, String) 指定位置替换,含头不含尾 delete(int start, int end) 删除 reverse() StringBuilder:

Java数据类型之Cache模式

1、关于Java数据类型 基本数据类型 基本数据类型有8种,每种基本数据类型都有对应的引用类型。 类型 描述 长度 可表示数据 包装类型 boolean 布尔型 1 true、false Boolean byte 字节型 1 2-7~27-1 Byte char 字符型 2 2-15~215-1 Character short 短整型 2 2-15~215-

JAVA基础- 为啥 Integer 中100=100 为true 而200=200则为false

话不多说,直接看题 @Test public void inspectInteger(){ Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; Integer i5 = 300; Integer i6 = 300; Integer i7 = 1000;

Integer类的缓存机制

存在下述例子,判断其输出结果。 public class Main{ public static void main(String[] agrs){ Integer a = 110; Integer b = 110; Integer c = 150; Integer d = 150; System.out.println("a == b: " + (a == b)); System.out.println("c == d: " + (c =

Java包装类中的缓存

缓存 包装类为了提高性能,会将最常用范围的基本数值对应的包装类进行缓存,通常使用cache内部类的static静态代码块进行缓存填充操作,valueOf()中存在缓存读取操作。我们通常定义包装类型时Integer a = 1,其默认就是使用的valueOf()方法,可自行通过javap进行反编译查看。 Integer