==
==
是比较两个变量的值,如果是基本数据类型,那么就是比较的基本数据的大小值
情况一
int a=1;
int b=1;
System.out.println(a==b);
以上图中:==比较的就是上面两个内存块中的值,都是1,所以是true
但是如果存储的是引用类型,其实比较的还是变量本身所存储的值,我们都知道, 变量存储引用类型其实存储的只是引用对象的地址作为值存储到变量中,那么当用== 判断时,比较的就是这两个地址值了,所以说==比的是两个变量所存储的值,
至于这个值是什么类型的,就看放什么了
情况二
User a = new User();
User b = new User();
System.out.println(a==b);
在上图中,a和b存的就是一个引用对象,在这时判断a==b时,比较的也是a和b所存储的值,
可以看出,a里面存的是0x1234,b里面存放的是0x5874,很明显不相等,所以是false
情况三
而当使用==比较字符串时:
String a="abcd";
String b="abcd";
System.out.println(a==b);
这时,a和b存储的是同一个常量字符串,地址也一样,所以是true。
情况四
String a=new String("abcd");
String b=new String("abcd");
System.out.printlnl(a==b);
如果通过创建对象的方式创建字符串,那么流程就会向上图一样,a和b里面所存放的值就不一样了,a和b 比较就是false
equals()
JAVA当中所有的类都是继承于Object
这个超类的,在Object类中定义了一个equals的方法,equals的源码是这样写的:
public boolean equals(Object obj) {
//this - s1
//obj - s2
return (this == obj);
}
可以看到,这个方法的初始默认行为是比较对象的内存地址值,一般来说,意义不大。所以,在一些类库当中这个方法被重写了,如String、Integer、Date。在这些类当中equals有其自身的实现(一般都是用来比较对象的成员变量值是否相同),而不再是比较类在堆内存中的存放地址了。
所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。
练习
/* String s1 = "a";
String s2 = "b";
String s3 = "c";
String s4 = "abc";
String s5 = s1+s2+s3;
System.out.println(s4 == s5);
System.out.println(s4.equals(s5));
*/
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
地址值的话,由于String是常量,存放于常量池中。而Java中对于常量有常量优化机制,所以没有注释的部分,在编译时候,就是将abc相加的结果赋值给s1,又发现常量池中已经有了abc,所以s1和s2指向的是常量池中的同一个abc,而注释的部分,由于是变量相加,运行时会在常量池中创建新的abc,所以是两个不同的abc
分享到:
相关推荐
赠送jar包:javacv-1.5.7.jar; 赠送原API文档:javacv-1.5.7-javadoc.jar; 赠送源代码:javacv-1.5.7-sources.jar; 赠送Maven依赖信息文件:javacv-1.5.7.pom; 包含翻译后的API文档:javacv-1.5.7-javadoc-API...
aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-sdk-4.15.1aip-java-...
JavaCV(Java Computer Vision)是一个基于Java的计算机视觉库,它为Java开发者提供了与OpenCV、FFmpeg等库的交互接口。标题中的“javacv-platform-1.5.1-source”表明这是一个JavaCV的1.5.1版本平台源码包,用于...
在技术文档或论坛中,标签通常用于标识主题的关键领域,所以这可能表示我们正在讨论关于Java编程中与QQ相关的技术问题、开发实践或者教程。 【压缩包子文件的文件名称列表】:java(QQ) 只有一个文件名“java(QQ)”...
alipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk-java-allalipay-sdk...
赠送jar包:weixin-java-miniapp-2.8.0.jar; 赠送原API文档:weixin-java-miniapp-2.8.0-javadoc.jar; 赠送源代码:weixin-java-miniapp-2.8.0-sources.jar; 赠送Maven依赖信息文件:weixin-java-miniapp-2.8.0....
JavaCV(Java Computer Vision)是一个开源的计算机视觉库,它为Java和Android开发者提供了与多个流行计算机视觉框架的接口,包括OpenCV、FFmpeg、FaceRecognizer等。标题中的"javacv-platform-1.5.5-bin.zip"指的是...
赠送jar包:aliyun-java-sdk-dysmsapi-1.1.0.jar; 赠送原API文档:aliyun-java-sdk-dysmsapi-1.1.0-javadoc.jar; 赠送源代码:aliyun-java-sdk-dysmsapi-1.1.0-sources.jar; 赠送Maven依赖信息文件:aliyun-java-...
赠送jar包:aliyun-java-sdk-core-4.5.30.jar 赠送原API文档:aliyun-java-sdk-core-4.5.30-javadoc.jar 赠送源代码:aliyun-java-sdk-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aliyun-java-sdk-kms-2.11.0.jar; 赠送原API文档:aliyun-java-sdk-kms-2.11.0-javadoc.jar; 赠送源代码:aliyun-java-sdk-kms-2.11.0-sources.jar; 赠送Maven依赖信息文件:aliyun-java-sdk-kms-...
java3d-1_5_1-windows-i586.exe
赠送jar包:aliyun-java-sdk-kms-2.11.0.jar; 赠送原API文档:aliyun-java-sdk-kms-2.11.0-javadoc.jar; 赠送源代码:aliyun-java-sdk-kms-2.11.0-sources.jar; 赠送Maven依赖信息文件:aliyun-java-sdk-kms-...
JavaReport-V3-Enterprise-Released.第四卷
赠送jar包:weixin-java-common-3.5.0.jar; 赠送原API文档:weixin-java-common-3.5.0-javadoc.jar; 赠送源代码:weixin-java-common-3.5.0-sources.jar; 赠送Maven依赖信息文件:weixin-java-common-3.5.0.pom;...
赠送jar包:aliyun-java-sdk-core-4.5.10.jar; 赠送原API文档:aliyun-java-sdk-core-4.5.10-javadoc.jar; 赠送源代码:aliyun-java-sdk-core-4.5.10-sources.jar; 赠送Maven依赖信息文件:aliyun-java-sdk-core-...
赠送jar包:aws-java-sdk-core-1.12.160.jar; 赠送原API文档:aws-java-sdk-core-1.12.160-javadoc.jar; 赠送源代码:aws-java-sdk-core-1.12.160-sources.jar; 赠送Maven依赖信息文件:aws-java-sdk-core-1.12....
Java开发-聊天系统设计与实现-含文档.zip Java开发-聊天系统设计与实现-含文档.zip Java开发-聊天系统设计与实现-含文档.zip Java开发-聊天系统设计与实现-含文档.zip Java开发-聊天系统设计与实现-含文档.zip Java...
赠送jar包:mysql-binlog-connector-java-0.21.0.jar; 赠送原API文档:mysql-binlog-connector-java-0.21.0-javadoc.jar; 赠送源代码:mysql-binlog-connector-java-0.21.0-sources.jar; 赠送Maven依赖信息文件:...
Java毕设-在线购物系统的设计与实现 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Java毕设-在线购物系统的设计与实现 Java毕设-在线购物系统的设计与实现 Java毕设-在线购物系统的设计与实现 Java毕设-...
Java WebSocket 是一个轻量级、高性能的WebSocket客户端与服务器端实现库,主要为Java开发者提供在Web应用中实现实时双向通信的能力。标题提到的"java-WebSocket-1.3.7.jar"和"java-WebSocket-1.3.4.jar"是这个库的...