int和Integer的区别(equals和==)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int和Integer的区别(equals和==)相关的知识,希望对你有一定的参考价值。
参考技术A 在这里,我首先讲一下常量池的概念和在jvm里面内存存储情况。1:常量池(constant pool) ,就是存放常量的池子(为什么会有常量池这种东西存在我在这里不做阐述,可以看看java虚拟机内存分析)。
2:int / Integer 在内存中的位置 :首先我们举个列子:
上面的三种创建整型方法大家应该再熟悉不过了,但是他们在内存中的存储位置却有着很大区别。
3:== 比较说明
4:注意点 :new Integer(int num) 和int 比较会做强制转换。用new形式创建Integer和int比较,会将new Integer()强制转换成int类型,见下图:
5:案例 :
6:jvm中常量池位置
1.7之前,存在于方法区。
1.7,存在于永久代
1.7之后,存在于元空间,就是pc直接内存,因为1.8删除了永久代。
7:equals()方法
直接看Integer重写Object的equals方法,直接比较的具体指是否相等。值相等即为true。
==和equals的区别
1、对于基本数据类型(如:int),==可以用来比较它们的值是否相等;对于封装类型(如:String,Integer),==是比较它们在内存中的地址是否一致。
2、equals是对象方法,比如String.equals(String example),用来比较String对象的值,equals方法可以override,我们可以重写equals方法来比较我们的自定义类对象。
PS:验证字符串的值是否等于某个字符串的值时最好以“test”.equals(String)这样的形式比较,防止出现空指针异常。
以上是关于int和Integer的区别(equals和==)的主要内容,如果未能解决你的问题,请参考以下文章
==与equals的区别与联系以及有关int与integer面试题