今天查看数据,发现有个状态字段没有改变,查看代码,发现进入修改有个门槛条件:
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编程语言中,对象“相等”比较的实现机制是面向对象编程思想中的一个核心概念。本文将对Java中实现对象“相等”比较的方式进行深入分析,包括对JVM内存管理、Java函数重写、装箱与拆箱机制以及equals()方法的...
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设计了八种对应的包装类(Wrapper Classes):Byte、Short、Integer、Long、Float、Double、Character和Boolean。这些包装类将原始类型封装成对象,使得我们可以使用对象...
Java包装类是Java编程语言中的一个关键特性,主要用于将基本数据类型(如int、char、boolean等)与对象之间进行转换。这是因为Java的API库中许多类和方法都设计为接收或返回对象,而基本类型不是对象。为了解决这个...
Java中long类型与Long类型的区别和大小比较详解 在Java中,long类型和Long类型都是用于表示数字的数据类型,但是它们之间存在着一定的区别。long类型是基本数据类型,而Long类型是对象类型,本文将通过示例代码详细...
在处理更复杂的数据类型时,Java提供了装箱和拆箱机制,允许基本数据类型和它们对应的包装类之间自动转换。例如,`Integer`是`int`的包装类,通过`Integer.valueOf(int value)`可以将`int`转换为`Integer`对象,而`...
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。equals方法是用于比较两个独立对象的内容...
使用`equals`方法可以比较两个`Long`或`Integer`对象的实际值是否相等。 ```java boolean isEqual = a.equals(b); ``` 2. **调用基本类型的转换方法**: 如果希望使用`==`来进行比较,可以先将对象转换为基本...
在比较基本类型的变量时,==用于比较值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。在比较引用类型的变量时,==和equals都用于比较栈内存中的地址是否相等,但通常会重写equals...
包装类为Java的基本数据类型提供了面向对象的接口,使得我们可以将基本类型的值封装到对象中,进而可以在需要对象的地方使用。 一、包装类概述 包装类的存在主要解决了以下两个问题: 1. **参数传递**:由于Java是...
Java中的包装类是针对基本数据类型(如int、float等)设计的一组类,它们使得基本数据类型能够参与面向对象的编程。包装类解决了Java语言中基本类型与对象之间转换的不便,使得基本类型的数据可以像对象一样进行操作...
`==` 运算符比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相等。例如 `Integer i = 128; Integer j = 128; System.out.println(i == j);`,这里的 `==` 是比较两个变量的值...
当用于基本数据类型时,它比较的是两个操作数的值是否相等;而当用于引用类型时,它比较的是两个引用是否指向内存中的同一对象。 ##### 示例: ```java int a = 5; int b = 5; System.out.println(a == b); // ...
4. **自动装箱与拆箱**:Java 5.0引入了自动装箱和拆箱机制,使得基本类型与对应的包装类之间可以无缝转换,简化了代码编写。例如,Integer i = 5; 这样的语句在Java 5.0及以后版本中是合法的。 5. **增强的for循环...
所有 Java 类都默认继承自 Object 类,因此可以使用其通用方法,如 equals() 用于比较对象是否相等,hashCode() 用于生成对象的哈希码,toString() 返回对象的字符串表示,以及 clone() 复制对象。 六、继承和访问...
- 原始类型使用`==`比较值的相等性,而引用类型使用`==`比较引用的相等性(即是否指向同一对象)。对于对象,还需使用`.equals()`方法来比较内容的相等性。 了解原始类型和引用类型之间的这些差异是编写高效、无...
因为 '==' 运算符是地址比较,而 equals 方法是值比较。如果需要比较数值,建议使用基础数据类型比较,而不是包装类比较。 六、总结 在 Java 中,包装类的比较是一个复杂的问题,需要注意自动拆包、装包、缓存和...
equals()方法用于比较两个对象的值是否相等,hashCode()方法用于获取对象的哈希码。两个对象如果equals()方法返回true,那么hashCode()方法一定返回相同的整数。 String类 String类是Java中的final类,不能被继承。...
1.17 操作符==用于比较两个变量的值是否相等,如果比较的是基本数据类型,它比较的是值;如果是引用类型,它比较的是内存地址,即两个对象是否指向同一个实例。 这个大纲详细列出了Java编程的基础知识,涵盖类的...
Integer类是Java中表示int类型包装类,提供了如`MAX_VALUE`和`MIN_VALUE`这样的静态常量,分别返回int类型的最大值和最小值。此外,Integer类还提供了一些构造方法,如`Integer(int value)`用于创建一个包含指定int...