==,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 ...
随机推荐
- JS-010-覆盖率测试工具 JSCoverage 初识
在日常的 js 脚本语言开发过程中,在开发攻城狮进行日常的单元测试和测试攻城狮日常的测试过程中,js 代码的覆盖率是白盒测试的一个重要的考量标准.前些天,在无意中看到了一个 js 覆盖率测试统计工具 ...
- 我的工具箱之MySql Front 5.3
下载地址:http://pan.baidu.com/s/1i4sJpNB 这款软件用来连接MySql,作为前端使用. 它功能全面,方便快捷,如果说有缺点的话,sql窗口中不能执行选择的部分有遗憾. 2 ...
- JS-JQ实现页面滚动时元素智能定位(顶部-其他部位)
先看效果: 阅读前提:充分理解div的三种定位方式:浮动,相对定位,绝对定位 方法一(顶部) 原理:直接使用css 进行控制:缺点:不兼容ie6-: 实现:positi ...
- 移动端公共css样式
@media screen and ( min-width: 319px){html{ font-size: 100px;}}@media screen and ( min-width: 359px) ...
- 计算NSString含有多少个相同字符串
// // NSString+NSStringExt.m // 01-NSString类 // // Created by apple on 14-3-20. // Copyright (c) ...
- SWIFT 闭包的简单使用二
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- fpm来制作rpm包
转自 http://blog.halfss.com/blog/2013/02/26/fpmbao-guan-li/ 另查看 http://my.oschina.net/lxcong/blog/1438 ...
- RAC object remastering ( Dynamic remastering )
RAC环境中,每个数据块都被一个instance所管控(mastered),管控数据块的instance被称作主实例(master instance).管控数据块就是说主实例(master insta ...
- 主机OS重装的节点加回RAC集群步骤示例(11gR2 RAC)
原文地址: https://blogs.oracle.com/Database4CN/entry/%E4%B8%BB%E6%9C%BAos%E9%87%8D%E8%A3%85%E7%9A%84%E8% ...
- C++Primer 第三章
//1.位于头文件中的代码一般不应该使用using声明.这是因为头文件的内容会拷贝到所有引用它的文件中,可能会产生始料未及的命名空间冲突. // 三种使用命名空间中的名字的方法 using names ...