首页
Java面试
PHP面试
经验笔记
在线工具
首页
在线工具
Java中==和equals有什么不同
Java中==和equals代码测试
C语言 在线运行
C++ 在线运行
Java 在线运行
PHP 在线运行
Python 在线运行
Python3 在线运行
Nodejs 在线运行
Ruby 在线运行
Perl 在线运行
Go 在线运行
R语言 在线运行
Lua 在线运行
C# 在线运行
结果显示HTML
清空
点击运行
public class JavaEqualsDemo { public static void main(String[] args){ //创建2个String对象 String s1 = new String("yxjc123"); String s2 = new String("yxjc123"); // == 比较的是2个地址,其中s1和s2在内存中的地址不同 System.out.println(s1==s2);//false // equals方法在String中比较的是对象内容 System.out.println(s1.equals(s2));//true String s3 = "yxjc123"; String s4 = "yxjc123"; // s3和s4都是引用数据类型,但"yxjc123"是保存在常量池中的,它们都指向的是常量池中同一个地址 // 所以 == 符号操作符 s3和s4相等 System.out.println(s3 == s4);//true // 同样是比较两个地址,s3指向的是常量池中的地址,s1指向的是堆中的地址。 System.out.println(s3 == s1);//false String s5 = "yxjc123yxjc123"; String s6 = s3 + s4; // s5保存的是指向常量池的地址;s6保存的是指向堆中对应对象的空间,因为字符串是不可变对象, // 无法直接通过相加而相连接,所以在进行相加操作时,实际上做的是:创建一个新的字符串对象, // 通过 new StringBuilder()来创建。结果是false System.out.println(s5 == s6);//false final String s7 = "yxjc123"; final String s8 = "yxjc123"; String s9 = s7 + s8; // final关键字修饰后,s7和s8都由变量变为了常量,编译器处理常量运算时会作出优化, // 将运算后的结果转为常量, 然后再将常量结果赋给s9。下面语句结果为true System.out.println(s9 == s5);//true final String s10 = s3 + s4; // s3 + s4是两个字符串对象相加,它们通过 new StringBuilder() 创建一个新的对象,然后 // 将此对象的地址给 s10, 然后final关键字将s10转为常量,但s10始终保存的是指向堆中的地址 // s5是指向常量池的地址。下面语句结果为false. System.out.println(s5 == s10);//false } }
运行结果
Java中==和equals代码测试在线测试,这是一个简单方便的Java在线运行工具,支持在线编译、在线调试和在线结果的实时反馈。