= =与equals的区别
来源:互联网 发布:在c 中执行sql语句 编辑:程序博客网 时间:2024/06/05 18:39
= =与equals的区别
看过网上写的关于这个主题的博客,感觉写的都不够深刻,今天看到这个问题,我也总结一下这个问题。如果有疑问大家可以共同交流。
【问题提出】
先看下面代码:
代码段1:
class A
{
publicint a;
publicvoid setA(int x)
{
a = x;
}
}
publicclass EqualAndIdetical
{
publicstatic void main(String args[])
{
//Test equals
A a1 = new A();
A a2 = new A();
a1.setA(1);
a2.setA(1);
if(a1.equals(a2))
{
System.out.println("YES!");
}
else
{
System.out.println("NO!");
}
A a3= new A();
A a4 = new A();
a3.setA(1);
a4 = a3;
if(a3 == a4)
{
System.out.println("YES!");
}
else
{
System.out.println("NO!");
}
}
}
最后的输出结果为NO YES,为何会出现这样的情况呢?
再看一个问题?如下:
publicclassEqualAndIdetical
{
publicstatic void main(String args[])
{
Stringstr1 = newString("Welcome");
Stringstr2 = newString("Welcome");
Stringstr3 = str1;
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
}
}
输出结果为false true true true
看了上边两个问题之后感觉,出现这样的现象是不可思议的,其实也没什么大不了的,只要记住下边的结论理解起来就很容易了。
对于字符串变量来说,使用==与使用equals()方法来比较,其比较方式是不同的。“==”用来比较两个变量本身的值,即两个变量在内存中的首地址,equals()方法用来比较两个字符串中所包含的内容是否相同。
对于非字符串类型的对象变量来说,“==”与equals()方法都用来比较其对象在内存中的首地址,即比较两个类类型的变量是否指向同一对象。
上边理论理解之后,咋们分析一下第二个问题,如图,可以看出内存中分配情况:根据内存分配情况可以得出上边的结论:
- equals与==,equals与hashcode的区别
- equals(Object) 与 == 的区别
- ==与equals的区别
- equals(Object) 与 == 的区别
- equals()与==的区别
- ==与equals()的区别
- equals与==的区别
- Java ==与equals()的区别
- equals(Object) 与 == 的区别
- ==与equals()的区别
- == 与 equals() 的区别
- equals(Object)与==的区别
- c# equals与==的区别
- equals()方法与==的区别
- ==与equals的区别
- c# equals与==的区别
- "=="与"equals()"的区别
- java equals与== 的区别
- 好纠结,写什么好了!前端工作笔记
- XML与HTML
- hdu 3401 单调队列+DP
- (每日算法)Leetcode--Simplify Path (简单路径)
- 解决maven项目中出Build path is incomplete. Cannot find class file for org/apache/ibatis/session/SqlSession
- = =与equals的区别
- 一键编译之通过脚本自动打成apk
- 开通C博的第一篇文章
- 题目1010:A + B
- Eclipse中操作Hive、HDFS时的jar包列表
- Ubuntu如何更换软件源
- VF 动态规划系列dp入门
- 回溯法-作业调度
- uva 104(dp)