博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变量的比较之equals 与 == 的区别
阅读量:5125 次
发布时间:2019-06-13

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

Java的数据类型分为两种

1.基本数据类型,byte,short,char,int,long,float,double,boolean,只要使用==运算符就可以了,==进行比较只是简单进行比较其中的字节组合。

  两个引用变量是否引用到堆上的同一个对象,也可以使用==。

2.复杂的对象类型,通常用equals。

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。equals与其相同。

举例

String s1 = new String("Monday"); String s2 = "Monday";String s3 = "Monday";String s4 = s1.intern();

比较s1,s2是否相同

if (s1 == s2) {                // false

System.out.println("s1 == s2");
} else {
System.out.println("s1 != s2");
}
if (s1.equals(s2)) {            // true
System.out.println("s1.eauqals(s2)");
} else {
System.out.println("!s1equals(s2)");
}

程序输出:

s1 != s2
s1.eauqals(s2)

s1与s2分别引用了两个String对象,所以s1 != s2

字符串缓冲池

程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1
将s2引用s1所引用的对象"Monday",所以s1.eauqals(s2)

比较s2,s3

if (s3 == s2) { // true

System.out.println("s2 == s3");
} else {
System.out.println("s2 != s3");
}
if (s3.equals(s2)) { // true
System.out.println("s2.eauqals(s3)");
} else {
System.out.println("!s2equals(s3)");
}

输出结果:

s2 == s3

s2.eauqals(s3)

 

比较s2,s4

if (s4 == s2) { // true

System.out.println("s2 == s4");
} else {
System.out.println("s2 != s4");
}
if (s4.equals(s2)) { // true
System.out.println("s2.eauqals(s4)");
} else {
System.out.println("!s2equals(s4)");
}

s2 == s4

s2.eauqals(s4)

(java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方 法没什么用处。但实际上,它做了个小动作:检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。

Foo a = new Foo();

Foo b = new Foo();
Foo c = a;

if (a == b) { // false            System.out.println("a == b");        } else {            System.out.println("a != b");        }        if (a.equals(b)) { // false            System.out.println("a.equals(b)");        } else {            System.out.println("!a.equals(b)");        }

输出结果:

a != b

!a.equals(b)

if (a == c) { // true            System.out.println("a == c");        } else {            System.out.println("a != c");        }        if (a.equals(c)) { // true            System.out.println("a.equals(c)");        } else {            System.out.println("!a.equals(c)");        }

输出结果:

a == c

a.equals(c)

 

转载于:https://www.cnblogs.com/zhoujianan/p/8461356.html

你可能感兴趣的文章
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>