`

java Integer的比较实践

    博客分类:
  • Java
阅读更多
package com.test;
public class 解包装包 {
   public static void main(String []args) {
     Integer a = 100;
     Integer b = 100;
     System.out.println(a==b);
   }
}
打印结果为:true
但是如果换成 128 > var >= -128 之外的整数就打false了。
这是什么原因呢?
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3。在jdk源码中
。。。
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
。。。

。。。
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache = new Integer(i - 128);
}
}
。。。
这边是java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
再加一句
Integer a = 100;
a++;
//这边a++是新创建了一个对象,不是以前的对象。
    public static void main(String []args) {
        Integer a = 100;
        Integer b = a;
        a++;
        System.out.println(a==b);
    }
打印就是false
对于127--128没有多大关系,但是在这范围之外就影响性能了吧,就像StringBuffer VS String一样了
分享到:
评论

相关推荐

    Java编程最差实践

    Java编程实践中,有些常见的错误和不推荐的做法可能会对程序性能造成影响,降低代码质量,甚至在面试中成为考察点。以下是一些Java编程最差实践的详细解释和改进方案: 1. **字符串连接误用**: - 错误做法:使用`...

    细数java中Long与Integer比较容易犯的错误总结.docx

    ### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...

    Java 理论和实践 了解泛型

    10. 泛型的局限性:由于类型擦除,泛型不能用于基本类型,所以Java提供了如`ArrayList&lt;Integer&gt;`这样的容器,实际上内部是通过包装类`Integer`实现的。另外,泛型也不能用于静态方法和变量,因为它们不属于任何特定...

    Integer创建对象

    在这种情况下,Java会进行拆箱操作,即将`Integer`对象转换为其对应的`int`值,然后进行数值比较。由于`i2`和`i3`(或者`i5`和`i6`)的值相加后结果仍然是40,且40在对象池范围内,所以这些表达式的结果为`true`。 ...

    JAVA实践课程老师的作业

    在这些JAVA实践课程的作业中,我们可以看到学生们在学习和掌握基础的Java编程技能。以下是一些关键的知识点: 1. **Applet**:在第一个作业中,学生创建了一个名为`Sj1_1`的Applet类,这是Java早期用于网页交互的小...

    JAVA 比较器实例

    Java中的比较器(Comparator)是实现自定义排序的关键工具,它允许我们按照特定逻辑对对象进行排序,而不仅仅是依赖于类的自然顺序。在实际开发中,比较器有着广泛的应用,比如在数据处理、列表排序、集合筛选等方面...

    JAVA并发编程实践

    ### JAVA并发编程实践 #### 一、并发编程基础 ##### 1.1 并发与并行的区别 在Java并发编程中,“并发”与“并行”是两个容易混淆的概念。简单来说,并发是指多个任务在同一时间段内交替执行,而并行则是指多个任务...

    Java理论与实践:变还是不变?

    Java类库中的String、Integer和BigDecimal类就是不变对象的示例-它们表示在对象的生命期内无法更改的单个值。并说明了在Java理论与实践中,不变性的一些长处、何时使用不变类和构造不变类的一些准则。使用不变对象比...

    25个经典Spark算子的JAVA实现

    JavaRDD&lt;Integer&gt; squaredNumbersRDD = numberRDD.mapPartitions(new FlatMapFunction&lt;Iterable&lt;Integer&gt;, Integer&gt;() { private static final long serialVersionUID = 1L; @Override public Iterator&lt;Integer&gt;...

    Java 9中如何对IntegerCache进行修改详解

    程序员应该谨慎处理Integer对象的创建,遵循Java的最佳实践,以确保代码的稳定性和效率。在Java 9及更高版本中,虽然没有提供直接修改IntegerCache的官方途径,但可以通过理解和利用其机制来优化代码,特别是在处理...

    Java8里面lambda的最佳实践Java开发Java经

    以下是对Java 8 Lambda最佳实践的深入解析: 一、理解Lambda表达式基础 Lambda表达式是匿名函数,可以被视为没有名字的方法。其语法形式为 `(parameters) -&gt; expression` 或 `(parameters) -&gt; { statements }`。...

    JAVA对象以及数据的工具类

    为了方便处理这些类型,Java提供了一些内置类,如Integer、Double等,它们是原始类型的包装类。包装类提供了许多便利的方法,例如,将字符串转换为对应的数值类型,或者进行数值比较。 在处理对象时,工具类经常...

    Java API_5.0中文版

    以上只是Java API 5.0中的一部分核心知识点,实际的学习过程中,还需要深入研究每个类和接口的功能,熟悉它们的API用法,并通过实践来加深理解。阅读Java API文档是提升编程技能和解决问题的重要途径。

    JAVA中实现“相等”比较的深入分析.pdf

    在Java编程语言中,对象“相等...总结来说,Java中的“相等”比较远不只是一个简单的“==”或equals()的调用,它背后蕴含着面向对象编程的深层次原则和最佳实践。理解这些机制有助于我们编写更加健壮和高效的Java程序。

    Java并发编实践之ThreadLocal变量.doc

    Java并发编程实践中,ThreadLocal变量是一个非常重要的工具,它在JDK1.2版本就已经引入。ThreadLocal不是代表一个线程实例,而是一种线程局部变量的机制,它为每个线程提供了一个独立的变量副本,各个线程可以独立地...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    6.4.2 constant_integer_info表 6.4.3 constant_float_info表 6.4.4 constant_long_info表 6.4.5 constant_double_info表 6.4.6 constant_class_info表 6.4.7 constant_string_info表 6.4.8 ...

    几个很不错的Java游戏源代码

    例如,使用ActionListener监听按钮点击事件,使用Integer类的方法进行数字的处理,如`Math.round()`用于四舍五入取整。 综合这些游戏源代码,开发者不仅能巩固Core Java的基本语法,如类、对象、继承、封装等面向...

    java开发spark程序

    在大数据处理领域,Apache Spark因其高效、易用和可扩展性而备受青睐。通常,Spark的开发主要使用Scala语言,因为它与Spark的API紧密集成。...通过不断的实践和学习,你将在Java Spark编程方面取得更大的进步。

    100个Java经典例子后端- Java

    "100个Java经典例子后端- Java"这个资源显然旨在帮助开发者通过实践加深对Java的理解,尤其在后端开发领域。下面我们将深入探讨这些经典例子可能涵盖的知识点。 1. **基础语法**: 包括变量声明、数据类型(如基本...

Global site tag (gtag.js) - Google Analytics