Java Integer int equals == 问题 求解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Integer int equals == 问题 求解答相关的知识,希望对你有一定的参考价值。

int x=5;

Integer x1= x;
Integer x2=x;
int x3 = new Integer(5);
x1.equals(x);
x1==x;
x2.equals(x1);
x2==x1;
x2==x3;
x2.equals(x3);
回答问题之前,先给出答案!
题目没那么容易,所以请先将自己的答案核对之后再答

全部都是true啊。
前面看错了一个。
对于基本数据类型,==比较的是值,对于对象,比较的是地址。
基本数据类型就8种,具体的可以百度。
对于基本数据类型和包装类(例如Integer这种)的==,比较的是值。
equals比较的都是值。
equals是比较值的,所以
只要变量的值确实是5,都是true。
x1==x; 这种包装类与基本类型的比较会拆箱,比较的也是值,也是true。
x2==x1;
他们都是指向一个引用的x,所以也是true。
x2==x3;
x3对包装的数据进行拆箱了。int x3= new Integer(5);
true,所以比较的还是包装类与基本类型,比较的也是值,也是true。
如果改成
Integer x3=new Integer(5);
比较的结果就是false了。
参考技术A Integer 定义的是一个对象
int 定义的是一个基础变量
一般数字类型的判断相等用 ==就可以了,似乎不支持.equals的方式
对于判断两个字符串相等的最好用.equals的方式

结果都是 true啊!
参考技术B int 是基本数据类型 Integer是其包装类,
一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。
== 比较的是物理地址 equals比较的是内容
参考技术C 以下是结果:

x1.equals(x); true
x1==x; true
x2.equals(x1); true
x2==x1; true
x2==x3; true
x2.equals(x3); true

但是,千万要小心的是,当 x定义不在-127到128的范围时。
x2==x1; 这个比较的结果是 false,至于为啥,建议看下 integer.valueof() 这个方法的实现。

另外当有基本类型的数据时,jvm1.5以后都会进行转换,进行值比较,对于这之前的版本,编译是通不过的。

但当两个对象进行==时,进行的是对象的引用比较,判断是否为同一对象。

string integer == equals 转

java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
  他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

"=="操作符的作用

1、用于基本数据类型的比较

2、判断引用是否指向堆内存的同一块地址。

equals所在位置:

在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写

public boolean equals(Object obj) {
        return (this == obj);
    }

equals的作用:

用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型

equals的基本使用:

 

boolean b = obj1.equals(obj2);

 

 

String类型比较不同对象内容是否相同,应该用equals,因为==用于比较引用类型和比较基本数据类型时具有不同的功能。

 

分析如下:

 

String作为一个对象来使用

例子一:对象不同,内容相同,"=="返回false,equals返回true

String s1 = new String("java");
String s2 = new String("java");

System.out.println(s1==s2);            //false
System.out.println(s1.equals(s2));    //true

例子二:同一对象,"=="和equals结果相同

String s1 = new String("java");
String s2 = s1;

System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

String作为一个基本类型来使用

如果值不相同,对象就不相同,所以"==" 和equals结果一样

String s1 = "java";
String s2 = "java";

System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

 

 

 

 

 

 

以上是关于Java Integer int equals == 问题 求解答的主要内容,如果未能解决你的问题,请参考以下文章

int和Integer的区别(equals和==)

JAVA中Integer的==和equals注意

[Java]判断Integer值相等最好不用==最好使用equals

java中如何将int与String作比较

java细节篇(==和equals的区别)

String 类型equals方法和int == 方法效率比较