java中equals()和等值比较
来源:互联网 发布:windows redcine 报错 编辑:程序博客网 时间:2024/05/12 14:14
在java中,当我们判断变量是否相等时,有两种方式,一种是 等值比较(==),一种是调用equals()方法。
1.等值比较(==)
使用格式: A == B。
- 基本类型:==比较的是值是否相同
- 引用类型:==比较的是地址值是否相同
注意事项:等号两边的数据类型应该要一致。这种一致指的是这两个变量是要可以互相转化的。例如:
> public class compareTest { > public static void main(String[] args) { > int i = 123; int i1 = 12; char i2 = 'c'; String s = "compare"; Integer i4= 12; System.out.println(i == i1); > System.out.println(i1 == i2); System.out.println(i1 == s;); //编译报错 System.out.println(i1 == i4); System.out.println(i2 == i4); } }
因为基本数据类型之间,存在“自动类型转换”,也叫隐式类型转换
隐式类型转换:有多种类型的数据混合运算时,系统首先自动的 将所有数据转换成 容量最大的那一 种数据类型,然后进行计算自动转换规则。
所以int、byte、float、double、short、long、char 之间是可以直接用等值比较而编译不会报错。
而Integer是引用类型,但是由于Integer的自动拆箱自动装箱特性,所以也可以和基本数据类型用等值比较。
2.equals()
格式:A.equals(B)
*注意事项:*equals()要特别注意A不能为null,否则会产生空指针异常。
equals方法是在Object类中定义的。源码如下:
public boolean equals(Object obj) { return (this == obj); }
也就是说, 当一个类没有重写equals()的时候,默认使用的是Object类的equals方法,这个时候,使用equals()和使用等值比较得出的结果都是一样的。
Java中有有一些类重写了equals方法,比如String类、封装类、Math类等。拿Integer类举例。
Integer类重写了equals()
API中Integer类中对此方法的描述是:
比较此对象与指定对象。当且仅当参数不为 null,并且是一个与该对象包含相同 int 值的 Integer 对象时,结果为 true。
public static void main(String[] args) { Integer i1 = 127; Integer i2 = 127; Integer i3 = 128; Integer i4 = 128; System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println(i3 == i4); System.out.println(i3.equals(i4)); }
值得注意的一点是Integer的一点特殊性,在本例中,输出结果为
true
true
false
true
因为Integer类针对-128~127之间的数据做了一个缓冲池,也就是说,Integer类型的-128~127的数值是存储在方法区的常量池中的。
i1和i2指向的都是常量池中的127,所以i1==i2的结果是true。
超过这个数值的Integer变量,将会在堆中重新开辟空间,所以i3和i4指向的不是同一个对象,也就是说其地址值是不同的,所以i3==i4的输出结果是false。
- java中equals()和等值比较
- equals比较与等值比较
- JAVA中equals()和==比较
- java中equals() 和 hasCode()方法比较
- java中==与 String中 equals 和对象中equals比较
- Java中对象的比较 == 和 equals()
- java中equals方法和“==”的比较
- java 中 == 和 equals()方法的 比较
- java中equals方法和“==”的比较
- Java中“==”和equals的比较
- Java中对象的比较 == 和 equals()
- java中equals方法和“==”的比较
- java中equals方法和“==”的比较
- Java中==比较运算符和equals详解
- java中==号和equals的比较
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- 在java中equals和“==”的比较
- 写高质量OC代码52建议总结:38.为常用的块创建typedef
- 0710学习总结(友元函数,string函数,引用)
- python新手入门(五)
- JVM(java 虚拟机)内存设置
- 以最简单方式学习Linux
- java中equals()和等值比较
- (5)junit(单元测试框架)
- 读《完全写作指南》
- [译]在keras 上实践,通过keras例子来理解lastm循环神经网络
- jsp基础操作
- c语言练习题
- 基于MIPS(LOOGSON)架构LINUX内核启动流程源代码分析(一)--kernel_entry
- android get网络数据请求加载到listview(本人和新手版本)
- Mac下使用私钥连接ssh