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 ...
随机推荐
- Spring MVC 3.0 深入及对注解的详细讲解
核心原理 1. 用户发送请求给服务器.url:user.do 2. 服务器收到请求.发现Dispatchservlet可以处理.于是调用DispatchServlet. 3. ...
- Devexpress XtraReport 打印时弹出Margins提示解决办法
当我们用Dev的报表引擎做报表时,如果把边缘设置为0时会弹出提示. 可以通过代码 XtraReport.PrintingSystem.ShowMarginsWarning = false; 取消该提示
- hypermesh2flac3d
hypermesh2ansys2flac3d 目的: 将hypermesh中划分的网格输出到flac3d中.过程是hypermesh12.0-ansys13.0-flac3d3.0. 视频教程详见:h ...
- http状态消息
1-5状态码了解 1XX 表示信息(消息) 2XX 表示成功 3XX 表示重定向 4XX 表示请求错误 *** 5XX 表示服务端错误 常见状态码 200 请求成功 一切正常 301 重定向,修改后的 ...
- Struts2中Action接收参数的四种形式
1.Struts2的Action接收参数的三种形式. a. 使用Action的属性接收(直接在action中利用get方法来接收参数): login.js ...
- Xcode 7如何 免费 真机调试iOS应用
运行Xcode后,点击菜单中的Preferences…进入Accounts标签,这里选择添加Apple ID: 在弹出的对话框中登入你的Apple ID,没有的话去注册一个就是了,登录成功后会看到下面 ...
- C#类的继承,方法的重载和覆写
在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...
- 可拖拽的ListView
今天研究了一下可拖拽的ListView ,当ListView的数据不能充满整个模拟器的时候,系统自带的listview上拖下拽都不好使,显得很单调, 为了实现上拖下拽时也能实现滚动的效果,这时候就需要 ...
- 1Caesar加密
Julius Caesar发明的较早的加密术,举个例子: 明文: meet me after the toga party 密文: PHHW PH DIWHU WKH WRJD SDUWB 其实就 ...
- Android斗地主棋牌游戏牌桌实现源码下载
本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...