`

java包装类型的值相等比较

    博客分类:
  • java
 
阅读更多
今天查看数据,发现有个状态字段没有改变,查看代码,发现进入修改有个门槛条件:
if (stageNo == loanPrj.getStageNo()){

}
其中stageNo是通过传参Integer stageNo进来,loanPrj.getStageNo()返回的也是Integer,这样就有问题了,,==在java中,比较的是栈中存放的值,对于对象类型,运行栈中存放的是指向对象的地址(原生类型,在栈中直接存放值),这样就导致比较结果为false,所以对于包装类型比较,慎用==进行;如果比较两边,有一边是原生类型(如int),这个==比较会正确返回true,因为原生类型int在堆中是不开辟内存的,他在栈中的值则为他本身的值,所以此次比较的是两边的值。

自动装箱
//在-128~127 之外的数
Integer i1 = 200; 
Integer i2 = 200;         
System.out.println("i1==i2: "+(i1==i2));                  
// 在-128~127 之内的数
Integer i3 = 100; 
Integer i4 = 100; 
System.out.println("i3==i4: "+(i3==i4));
在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,

所以范例中,i3 与 i4实际上参考至同一个对象。

如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,

即相当于每次装箱时都新建一个 Integer对象,所以范例中,i1与i2参考的是不同的对象。
分享到:
评论

相关推荐

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

    在Java编程语言中,对象“相等”比较的实现机制是面向对象编程思想中的一个核心概念。本文将对Java中实现对象“相等”比较的方式进行深入分析,包括对JVM内存管理、Java函数重写、装箱与拆箱机制以及equals()方法的...

    java包装类练习.doc

    Java 包装类型的 equals 方法用于比较两个对象是否相等。例如,Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);//false System.out.println(i1.equals(i2));//true这里...

    java原始数据类型的包装类

    为了使原始类型能够参与面向对象的编程,Java设计了八种对应的包装类(Wrapper Classes):Byte、Short、Integer、Long、Float、Double、Character和Boolean。这些包装类将原始类型封装成对象,使得我们可以使用对象...

    Java 包装类

    Java包装类是Java编程语言中的一个关键特性,主要用于将基本数据类型(如int、char、boolean等)与对象之间进行转换。这是因为Java的API库中许多类和方法都设计为接收或返回对象,而基本类型不是对象。为了解决这个...

    Java中long类型与Long类型的区别和大小比较详解

    Java中long类型与Long类型的区别和大小比较详解 在Java中,long类型和Long类型都是用于表示数字的数据类型,但是它们之间存在着一定的区别。long类型是基本数据类型,而Long类型是对象类型,本文将通过示例代码详细...

    Java字符串类型转换

    在处理更复杂的数据类型时,Java提供了装箱和拆箱机制,允许基本数据类型和它们对应的包装类之间自动转换。例如,`Integer`是`int`的包装类,通过`Integer.valueOf(int value)`可以将`int`转换为`Integer`对象,而`...

    java常见面试题(史上最全最经典-希望对你有用)

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。equals方法是用于比较两个独立对象的内容...

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

    使用`equals`方法可以比较两个`Long`或`Integer`对象的实际值是否相等。 ```java boolean isEqual = a.equals(b); ``` 2. **调用基本类型的转换方法**: 如果希望使用`==`来进行比较,可以先将对象转换为基本...

    Java工程师必会100题

    在比较基本类型的变量时,==用于比较值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。在比较引用类型的变量时,==和equals都用于比较栈内存中的地址是否相等,但通常会重写equals...

    【Java基础笔记】包装类.docx

    包装类为Java的基本数据类型提供了面向对象的接口,使得我们可以将基本类型的值封装到对象中,进而可以在需要对象的地方使用。 一、包装类概述 包装类的存在主要解决了以下两个问题: 1. **参数传递**:由于Java是...

    java 包装类发给的发广告豆干

    Java中的包装类是针对基本数据类型(如int、float等)设计的一组类,它们使得基本数据类型能够参与面向对象的编程。包装类解决了Java语言中基本类型与对象之间转换的不便,使得基本类型的数据可以像对象一样进行操作...

    java基础(最全带图)

    `==` 运算符比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相等。例如 `Integer i = 128; Integer j = 128; System.out.println(i == j);`,这里的 `==` 是比较两个变量的值...

    Java中的==和equals区别

    当用于基本数据类型时,它比较的是两个操作数的值是否相等;而当用于引用类型时,它比较的是两个引用是否指向内存中的同一对象。 ##### 示例: ```java int a = 5; int b = 5; System.out.println(a == b); // ...

    Java API_5.0中文版

    4. **自动装箱与拆箱**:Java 5.0引入了自动装箱和拆箱机制,使得基本类型与对应的包装类之间可以无缝转换,简化了代码编写。例如,Integer i = 5; 这样的语句在Java 5.0及以后版本中是合法的。 5. **增强的for循环...

    GitHub 上标星 115k+ 的 Java 教程.pdf

    所有 Java 类都默认继承自 Object 类,因此可以使用其通用方法,如 equals() 用于比较对象是否相等,hashCode() 用于生成对象的哈希码,toString() 返回对象的字符串表示,以及 clone() 复制对象。 六、继承和访问...

    JAVA原始类型和引用类型有哪些区别?[定义].pdf

    - 原始类型使用`==`比较值的相等性,而引用类型使用`==`比较引用的相等性(即是否指向同一对象)。对于对象,还需使用`.equals()`方法来比较内容的相等性。 了解原始类型和引用类型之间的这些差异是编写高效、无...

    解决Java包装类比较时遇到的问题

    因为 '==' 运算符是地址比较,而 equals 方法是值比较。如果需要比较数值,建议使用基础数据类型比较,而不是包装类比较。 六、总结 在 Java 中,包装类的比较是一个复杂的问题,需要注意自动拆包、装包、缓存和...

    java常见试题

    equals()方法用于比较两个对象的值是否相等,hashCode()方法用于获取对象的哈希码。两个对象如果equals()方法返回true,那么hashCode()方法一定返回相同的整数。 String类 String类是Java中的final类,不能被继承。...

    JAVA知识大纲 (考试复习) 新版

    1.17 操作符==用于比较两个变量的值是否相等,如果比较的是基本数据类型,它比较的是值;如果是引用类型,它比较的是内存地址,即两个对象是否指向同一个实例。 这个大纲详细列出了Java编程的基础知识,涵盖类的...

    java学习心得一些笔记

    Integer类是Java中表示int类型包装类,提供了如`MAX_VALUE`和`MIN_VALUE`这样的静态常量,分别返回int类型的最大值和最小值。此外,Integer类还提供了一些构造方法,如`Integer(int value)`用于创建一个包含指定int...

Global site tag (gtag.js) - Google Analytics