`

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包装类比较时遇到的问题

    所谓包装类的作用就是将原始数据类型转换成引用数据类型,下面这篇文章主要给大家介绍了关于在Java包装类比较时遇到的问题的解决方法,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。

    JAVA基础课程讲义

    基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用方法(已讲过,不再讲!) ...

    java 面试题 总结

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    超全Java面试题(精简版)持续更新….

    一、基础篇 1、 Java类型是什么? Java8大基本数据类型是什么? byte、short 、int、long、float、double、boolean、char 2、什么是装箱?...因为只重写equals,不重写hashcode的话,就算比较这俩个值的内容相等,

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    整理后java开发全套达内学习笔记(含练习)

    long类型值,需跟L或l在数据后;float类型要跟f或F;或强制类型转换 科学计数法:12.5E3 类型转换默认序列: byte > short > int > long > float > double char 」 注意:默认类型转换(自动类型提升)会丢失精度...

    程序员考试刷题-Java:Java

    程序员考试刷题Java 考试 标题 ID Oracle ...测试字符串和其他对象之间的相等性 创建 if 和 if/else 以及三元结构 使用 switch 语句 创建和使用数组 声明、实例化、初始化和使用一维数组 声明、实例

    安卓java读取网页源码-AndroidInterview:Android面试常见问题

    用来鉴定两个对象是否相等,Object类中的hashCode方法返回对象在内存中地址转换成的一个int值,所以如果没有重写hashCode方法,任何对象的hashCode方法是不相等的。 int、char、long各占多少字节数 4、1或2或4、8 ...

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part1

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝性 1. 2.6...

    Java2核心技术.part6

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part4

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part2

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    超级有影响力霸气的Java面试题大全文档

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    oca-preparacao-alura:这个项目是练习基本的Java。 为我准备Oracle认证助理Java程序员测试

    比较和对比Java的功能和组件,例如:平台独立性,面向对象,封装等。 声明和初始化变量(包括基本数据类型的转换) 区分对象引用变量和原始变量 知道如何读写对象字段 解释对象的生命周期(创建,“通过重新分配...

    【05-面向对象(下)】

    基本数据类型的包装类 •八大数据类型的包装类分别为:Byte、Short、Integer、Long、Character、 Float、Double、Boolean。 把基本数据类型变量包装类实例是通过对应包装类的构造器来实现的,不仅如此,8个...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    C语言教程(原书第4版) 《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的...附录c ansi c与传统c的比较 附录d ascii字符码 附录e 操作符的优先级和结合性

    c#学习笔记.txt

    (但是请注意:两个不同但结构上等效的委托类型的实例可能会比较为相等),准确地说,两个具有相同参数列表、签名和返回类型的不同的委托类型被认为是不同的委托类型。委托实例所封装的方法集合称为调用列表。 5, ...

Global site tag (gtag.js) - Google Analytics