equals与==的区别
equals与==的区别。
下面是equals的源码
public boolean equals(Object anObject) {
if (this == anObject) { //如果两个对象相等则返回true
return true;
}
if (anObject instanceof String) { //字符串调用equals时
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) { //如果两个字符串长度相等
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) { //判断两个字符串相同下边的字符的值是否相同,如果出现不相等,就会返回false
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
equals: 用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==: 包含基本数据类型的比较 以及判断引用是否指向堆内存的同一块地址。
下面我们举些例子说明下:
第一种情况:
String s1 = new String("test");
String s2 = new String("test");
System.out.println(s1==s2); //new String()两个字符串的显然不是同一块地址,故返回false
System.out.println(s1.equals(s2)); //两个字符串的值相同,故返回true
第二种情况:
String s1 = new String("test");
String s2 = s1;
System.out.println(s1==s2); //由于s2引用了s1的对象,同一地址,返回true
System.out.println(s1.equals(s2)); //s1 = "test",s2 = "test",故返回true
第三种情况:
String s1 = "java";
String s2 = "java"; System.out.println(s1==s2); //因为s1 = "java",当定义s2 = "java"时"java"已经存在,s2引用缓存"java",所以引用地址想同,返回true
System.out.println(s1.equals(s2)); //很明显,s1.equals(s2),返回true
equals与==的区别的更多相关文章
- java equals和==的区别
大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...
- equals和==的区别 你真的掌握了吗?
PS:最近读Java编程思想的时候发现了一些小问题.就是equals方法和==,感觉自己是真正掌握了,其实并没有.简单的记录一下. 学习内容: 1.equals 和 == 的区别 equals和== ...
- 【ASP.net】Equals 和 == 的区别
在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...
- 【java】由equals和==的区别引出的常量池知识
equals和==的区别,百度查到的结果大都是:equals比较的是值,==比较的是引用地址. String str1 = "abc"; String str2 = "a ...
- 比较compareTo与equals及==的区别
1.compareTo: 附上:源码: public int compareTo(String anotherString) { int len1 = value.length; ...
- Java笔记——equals和==的区别
摔在这里几次,还是记下来吧. 原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html -------------- ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- equals()和hashCode()区别?
equals()和hashCode()区别? ------------------------------------------------- equals():反映的是对象或变量具体的值,即两个对 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
随机推荐
- 数组操作splice
今天,实现某个功能时需要操作数组, var array=[1,2,3,3,4]; console.log(array); //结果: 1,2,3,3,4 var data=arr ...
- git 小结
git cherry-pick de0ec64 可将另一个分支中的提交 cherry-pick到当前分支来
- Scala的下一步
第七步:带类型的参数化数组 Scala里可以使用new实例化对象或类实例.当你在Scala里实例化对象,可以使用值和类型把它参数化:parameterize.参数化的意思是在你创建实例的时候“设置”它 ...
- Bootstrap v4.0.0-alpha.5 发布,大量更新
Bootstrap v4.0.0-alpha.5 发布了,Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的 ...
- 《C++primer》v5 第4章 表达式 读书笔记 习题答案
4.1 105 4.2 *vec.begin()=*(vec.begin())//先调用点运算符,再解引用 *vec.begin()+1=(*vec.begin())+1//先解引用,再加一 4.3略 ...
- IDEA安装配置(SVN)
IntelliJ IDEA 14 注册码 Win7系统上配置使用Intellij Idea 13的SVN插件 IntelliJ 设置JDK http://blog.sina.com.cn/s/blog ...
- 单例模式(Java)
//单例模式 public class Singleton { private static Singleton s; private Singleton(){ } public static Sin ...
- 【转】Unity3d + NGUI 的多分辨率适配
原文地址:http://www.cnblogs.com/cqgreen/p/3348154.html 一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS ...
- C#通过WatiN操作页面中内嵌的Iframe
通过WatiN.Core.Broswer.Frame()方法来获取iframe对象,之后的容器就是frame,然后进行操作. 下面的例子是登录QQ空间的: Frame frame = browser. ...
- LinQ递归查询
--由父项递归下级 with cte(refid,pid,zname,code) as (--父项 union all --递归结果集中的下级 select t.refid,t.pid,t.zname ...