Java中的==和equals区别
来源:互联网 发布:朱文臣 的网络与时 编辑:程序博客网 时间:2024/06/06 10:25
A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
C.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
D.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。
详述:
String str1 = "abc";
String str2 = "abc";
String str3 = str1+str2;
String str4 = str1+"cd";
String str5 = "ab"+str2;
String str6 = "ab"+"cd"; //这种创建方式是放入字符串池的.这种情况实际上是创建了1个对象,abcd"1个对象
String str7 = "abcd";
System.out.println(str1==str2); //返回ture
System.out.println(str6==str7); //返回ture
另一个问题:
我们首先来看一段 Java代码:
String str=new String("abc");
紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。
我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("abc")了。那么,new String("abc")为什么又能被看成"abc"和new String()呢?我们来看一下被我们调用了的String的构造器:
Java代码
public String(String original) {
//other code ...
}
大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:
我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。
使用new创建对象是调用Class类的newInstance方法,利用反射机制创建对象。
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,他们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b即返回false,而这两个对象中内容是相同的,所以,表达式a.equals(b)将返回true。
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是比较两个变量指向的对象是否是同一个对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可以认为两个对象的内容是相同的。
转载自:http://blog.sina.com.cn/s/blog_532637060100gkfc.html
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- Java中的==和equals区别
- 编译生成的Apk安装到手机提示应用未安装,需给apk签名
- 手动挂载swap分区
- 在Android源码环境下编译系统App使用第三方jar包的方法(备忘)
- Hibernate 对象三种状态 瞬时态,持久态,脱管态 以及 save update saveOrUpdate merge等的使用
- TWaver MONO Design 中动画的导出与播放
- Java中的==和equals区别
- 串口通讯控制器实现之----发送模块
- 你所不知的 CSS ::before 和 ::after 伪元素用法
- *线程详解*
- 执行Git命令时出现各种 SSL certificate problem 的解决办法
- ListView怎么处理大量的加载数据;比如有10万条数据,你在ListView怎么处理?
- 字符串函数---atof()函数详解及实现(完整版)
- storm守护进程启动过程中出现卡死现象的解决办法
- 防止UI界面被输入法遮挡(画面随输入法自适应)