==,equal,hasCode(),identifyHasCode()浅析
在java中如果我们要比较两个对象之间的关系的话有可能会用到下面的几种方法:==,equal,hasCode(),identifyHasCode()。
==用来比较对象本身是不是相同的。
public class Test
{
public static void main(String[] args)
{
String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");
System.out.println("result of s1==s2 is:"+(s1==s2));
System.out.println("result of s3==s4 is:"+(s3==s4));
System.out.println("identityHashCode of s1 is:"+System.identityHashCode(s1));
System.out.println("identityHashCode of s2 is:"+System.identityHashCode(s2));
System.out.println("identityHashCode of s3 is:"+System.identityHashCode(s3));
System.out.println("identityHashCode of s4 is:"+System.identityHashCode(s4));//s3和s4的 identityHashCode是不同的
System.out.println("hashCode of s3 is:"+s3.hashCode());
System.out.println("hashCode of s4 is:"+s4.hashCode());//s3和s4的hashCode是相同的
}
}
通过上面的代码可以清楚地看见,将s1 和s2直接赋给常量字符串是,s1和s2是指向常量池中的同一个字符串。第一次执行String s1="abc";时先搜索常量池中有没有该字符串,如果没有该字符串常量则创建该字符串常量,并将该字符串的引用赋值给s1.如果已经有了字符串常量了则直接将该字符串常量赋值给s1.同理,当执行String s2=“abc”;时,因为字符串已经存在于常量池中,则将该字符串的引用直接赋值s2.所以,s1和s2指向同一个对象。通过下面的identityHashCode也可以验证这一原理。s1和s2的值相同。
当执行String s3=new String (“abc”);时,主线程会在堆内存上先创建一个String内对象,其值为“abc”;当执行String s4=new String (“abc”);时,主线程会在堆内存上创建另一个String类对象,其值也为“abc”;但这里就要注意了,虽然对象s3和s4的值相同,但他们却是两个不同的对象。==比较的结果为假。identityHashCode的值也不相同。
equal比较两个对象时,只是比较这两个对象的字符串的内容是不是相同的。这点很容易来理解。
新手发帖,望大家指正,谢谢。
==,equal,hasCode(),identifyHasCode()浅析的更多相关文章
- Java String 的equals, == , hascode的区别
1.equals 和 == ==在java中是比较引用的,即在内存中的地址.而String的equals()是比较字符串的内容 http://blog.csdn.net/barryhappy/arti ...
- 浅析STM32之usbh_def.H
[温故而知新]类似文章浅析USB HID ReportDesc (HID报告描述符) 现在将en.stm32cubef1\STM32Cube_FW_F1_V1.4.0\Middlewares\ST\S ...
- java并发:jdk1.8中ConcurrentHashMap源码浅析
ConcurrentHashMap是线程安全的.可以在多线程中对ConcurrentHashMap进行操作. 在jdk1.7中,使用的是锁分段技术Segment.数据结构是数组+链表. 对比jdk1. ...
- AtomicInteger的CAS算法浅析
之前浅析过自旋锁(自旋锁浅析),我们知道它的实现原理就是CAS算法.CAS(Compare and Swap)即比较并交换,作为著名的无锁算法,它也是乐观锁的实现方式之一.JDK并发包里也有许多代码中 ...
- TiKV事务实现浅析
TiKV事务实现浅析 Percolator事务的理论基础 Percolator的来源 Percolator事务来源于Google在设计更新网页索引的系统时提出的论文Large-scale Increm ...
- 浅析 record 使用场景
浅析 record 使用场景 Intro 之前我们有介绍过 record 基本知识,record 会实现基于值的类型比较,最近遇到的几个问题觉得用 record 来解决会非常方便,分享一下 基于值的类 ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
随机推荐
- CentOS6.5Minimal安装Gitlab7.5
文章出处:http://www.restran.net/2015/04/09/gilab-centos-installation-note/ 在 CentOS 6.5 Minimal 系统环境下,用源 ...
- windows系统下利用MySql命令行进入MySql数据库
Enter password: ****
- 一表格简单明了区分BI和大数据
大数据和BI两词现阶段处于刷屏状况,但是,很多人对于这两词确傻傻分不清.改怎么区别呢?本文将从概念.应用.发展趋势等多个角度对大数据和BI进行区分. BI(Business Intelligence) ...
- json解析转map
HashMap<String, Object> map = new HashMap<String, Object>(); JSONObject jsonObject = ...
- 跳到下个View
nextWebView = [[ WEBViewController alloc ] initWithNibName : @"WEBViewController" bundle : ...
- CAM350测量
CAM350 测量方法 1. 单位设置:在菜单:Settings 下选中 Unit: 英制 公制 精确度 CAM350 软件默认的是英制,不习惯用英制的人,就改为公制的呀 软件默认的是英制 就改为公制 ...
- [PCL]keypoint
1. Harris角点 http://www.cnblogs.com/ironstark/p/5064848.html 2. ISS关键点 http://www.cnblogs.com/ironsta ...
- python 上传下载文件
server.py #!/usr/bin/env python # -*- coding:utf- -*- import SocketServer import os class MySocketSe ...
- SQL Server字符串函数(超实用)
1. len():计算字符串长度 2. lower().upper():字符串转换为大.小写 3. ltrim().rtrim():截去字符串左.右侧空格 4. space():返回由重复的空格组成的 ...
- cache与SDRAM
hugohong hugohong 本版等级: #2 得分:20回复于: 2009-04-19 21:51:03 牛人说的,拿出来分享一下:cache是高速缓冲, 解决高速cpu和相对低速sdra ...