博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java int 大小吗_java中int和Integer比较大小
阅读量:6376 次
发布时间:2019-06-23

本文共 705 字,大约阅读时间需要 2 分钟。

Integer是int的封装对象,两个对象==比较的是栈的值

Integer a = new Integer(1);

Integer b = new Integer(1);

a与b存的是Integer的堆中的地址,而不是值

a、b指向堆中的地址显然不同所以 a==b 为false

int c = 1; int为值类型,引用类型Integer与值类型int比较显然比较的是值

因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值

所以a==c比较的是他们各自的value, a==c为true

Integer e=1; 这个比较特殊,直接赋值 它有独立的内存,每次赋值时将检查内存中是否有值跟他匹配的,若有则把此内存地址付给e,若没有,开辟新的内存

你可以尝试下面的例子:

Integer t = 1;

Integer t1 = 1;

t==t1 为true,如上所说,此时t与t1指向的是同一块内存

new 一定是开辟新的内存,直接赋值则不一定开辟新的内存

因为a的引用指向堆,而e指向专门存放他的内存,所以他们的内存地址不一样

所以a==e为false

c==e等同于 a==c,一个引用类型一个值类型

注意:Integer n6 = 128; Integer n7 = 128;  n6 == n7为false,这是为什么呢?因为JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。

转载地址:http://vlvqa.baihongyu.com/

你可能感兴趣的文章
Git跨平台中文乱码临时解决方案
查看>>
20160420javaweb之文件上传和下载
查看>>
CentOS更换源和软件更新操作
查看>>
二叉树递归与非递归遍历(附完整源码)
查看>>
ios开发系列-UITableController-动态页面
查看>>
sublime中BracketHighlighter 插件使用
查看>>
ROS 2编写包并用colcon编译
查看>>
heading python decorator
查看>>
ubuntu环境初始化
查看>>
《浪潮之巅》读书笔记1
查看>>
eclipse怎么设置默认编码为UTF-8及设置字体大小
查看>>
《Unity3D-鱼的方向 鱼的游动 控制代码》
查看>>
雅虎网站优化34条法则
查看>>
c++错误
查看>>
Java 原生NIO
查看>>
【Java例题】5.5 映射类的使用
查看>>
PetShop 4.0知识点:base 关键字用于从派生类中访问基类的成员
查看>>
一.正则表达式
查看>>
浮点数向偶数舍入的问题 Round-to-Even for Floating Point
查看>>
linux的Ubuntu
查看>>