首先看看下面的图,看清楚了图咱们要说的知识点也就说说清楚了一半





int a=10;

String b="ss";

String c=new String("kkk");

Person d=new Person("dlf");

String e=new String("kkk");

String f="ss";





jvm中有堆heap,栈stack,常量池constant。

我们的基本对象,包括int,double等都放在栈里,引用类型如String,Person(Person 就是一个pojo类而已)引用(如上面的c,d)放在栈里,真实的数据放在堆中。





== 比较的是两个对象在栈中存放的数据是否一样

b==f 比较的就是两个105的地址 (105就是指ss在常量池中的地址)

c==e 一个1063一个1095 自然就不相等了





equals 比较的事堆中的内容

c.equsls(e) 就是两个kkk在比较 答案不言自明





Objeck的equals方法如下

    public boolean equals(Object obj) {

        return (this == obj);

    }

换句话说object的类的==与equals就是一回事

有兴趣的可以看看String的equals方法





关于==与equals说完了,再说说字符串的构建

对字符串的构建 我们最常使用的有两种

String a1="bbb";

String a2=new String("ccc");

两种方式有不同

第一种方式,通过上面的图大家也看到了,bbb这个数据存放在常量池里;准确的说是用String a1="bbb"这种方式产生字符串,jvm首先会在常量池里查找是否有bbb这个数据,如果有就把bbb这个数据的地址给a1,否则就在常量池里新建一个数据单元里面存放bbb,然后把这个单元的地址给a1。(上图中的两个105 就是这个例子)

第二种方式在于 在编译的时候会有一个ccc在常量池,等到运行的时候,会在堆区在创建一个数据单元里面存放ccc,然后a2里面就存放堆里面那个数据单元的地址!另外即使堆中已经有了这个字符串,通过new的方式,还会再产生一个堆区的数据(如上图中的1063与1095)





所以

String a=new String("bbb");

产生了两个对象,一个在堆一个在常量池。





String a=new String("bbb");

String c=new String("ccc");

产生了四个对象,两个在堆两个在常量池。





String a1=new String("sss");

String a2=new String("sss");





对于这种情况,堆区肯定有两个对象,那常量池里面呢? 一个sss还是两个sss 我不敢肯定 但我估计应该是两个。

equal与== 个人笔记的更多相关文章

  1. 【算法笔记】A1060 Are They Equal

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  2. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  3. AKKA 笔记 - 有限状态机 -2

    AKKA 笔记 - 有限状态机 -2 原文地址: http://rerun.me/2016/05/22/akka-notes-finite-state-machines-2/ 在上一节的Akka FS ...

  4. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  5. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  6. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  7. 《PHP Manual》阅读笔记2

    本次笔记截止到 语言参考 流程控制. 1.没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的.但另外一方面表达式 1 <= 1 == 1 是合 ...

  8. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  9. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Final

    Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

随机推荐

  1. 热烈庆祝自已厉精13年开发的 DB查询分析器 7.01(最新版本) 在中关村在线本月获得近6000次的下载量

    中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员)推出的个人作品----万能数据库查询分析器,中文版本 DB 查询分析器.英文版本DB Query Analyzer.它 ...

  2. DoesNotExist at /account/

    DoesNotExist at /account/ User has no account. Request Method: GET Request URL: http://127.0.0.1:800 ...

  3. EJB3基本概念、运行环境、下载安装与运行jboss

    EJB3基本概念 什么是EJB: EJB(EnterpriceJavaBeans)是一个用于分布式业务应用的标准服务端组件模型.采用EJB架构编写的应用是可伸的.事务性的.多用户安全的.采用EJB编写 ...

  4. 关于在eclipse开发环境上打开手机data文件

    使用Eclipse开发Android上的数据库应用,需要把数据库文件放到/data/data/mynamespace/database文件夹下,普通手机通过ROOT后经常还是看不到这个文件夹,这时需要 ...

  5. IDEA阅读Spark源码

    将spark编译成idea-sbt工程 tar -zxvf spark-1.1.0.tgz cd spark-1.1.0 sbt/sbt gen-idea 等待-- 成功后就能以SBT工程的形式导入i ...

  6. Android系统剪切板

    Android系统剪贴板 复制字符串到系统剪切板 /** * 复制文本到剪切板 * * @param text * @return */ @SuppressWarnings("depreca ...

  7. API创建员工

    DECLARE lc_employee_number PER_ALL_PEOPLE_F.EMPLOYEE_NUMBER%TYPE := 'PRAJ_01'; ln_person_id PER_ALL_ ...

  8. Cocos2Dv3.4在AppDelegate中不返回的情况及解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们通常想在app启动的早期做一些事情,可能放在AppDeleg ...

  9. spark概念、编程模型和模块概述

    http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...

  10. 01安卓像素 dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

    一.基本概念 dip        : Density independent pixels ,设备无关像素. dp        :就是dip px        : 像素 dpi       :d ...