码农带你区分String类型的"=="和equals()
大家玩csdn也可以关注我的博客额http://blog.csdn.net/wujiandong25253344
情形一:
String s1= new String("hello");
String s2 = new String("hello");
当我们使用new时,每次都会在内存中开辟一个新的空间存放对象的值,
“==”号比较的是s1,s2对象的内存首地址,equals比较的是内存中具体的值
所以(s1==s2)返回false;(s1.equals(s2))返回true;
如下图1所示:
图1
情形二:
String s1= "hello";
String s2 = "hello";
字符串“="号赋值只有在遇到代码时才缓存到常量池中,
如上图两行代码,当String s1= "hello";执行时,先会在heap中的常量池(String pool)中查找有没有"hello"的字符串存在,如果存在,就返回字符串的首地址,
如果不存在,就在常量池中新建一个"hello",并返回字符串的首地址。我们可以看出,第一行代码是不存在,所以返回字符串的首地址。
当执行到String s2 = "hello";我们从常量池中发现"hello"已经存在,返回原字符串的内存首地址
所以(s1==s2),返回的是true;(s1.equals(s2))返回true;
如下图2所示:
图 2
情形三:
String s1= "hello";
String s2= new String("hello");
s1是存放的常量池中的"hello"的首地址,s2是new出来的对象,所以新建一块内存,存放的是新内存中"hello"的首地址。
所以(s1==s2),返回的是false;(s1.equals(s2))返回true;
如下图3所示:
图 3
各位看官,困惑你们已久的String字符串中"=="与equals()方法的使用理解明白了吗?谢谢观看,下次再见!
码农带你区分String类型的"=="和equals()的更多相关文章
- String类型中 "=="和"equals"比较的差别
String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否 ...
- 关于String类型中==和equals的区别。
"=="操作符的作用 1.用于基本数据类型的比较,比较的是值. 2.用于比较对象,判断对象的引用是否指向堆内存的同一块地址. equals的作用 用于比较两个对象的内容是否相同 代 ...
- String类型中"=="和"equals"的区别
"=="比较的是两个字符串的内存地址. "equals"比较的是两个字符串的实际值. 例子1. String s1="abc"; Stri ...
- 利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)
本篇的具体思路来源于右侧网址:http://blog.csdn.net/qq_19551571/article/details/49977983 本篇代码有所修改,请具体区分. 本篇使用的是 form ...
- Java中关于String类型的一些思考
作为初学者在学习Java的时候,变量类型是不可避免会遇到的,在以往我们的印象中字符串String都是作为基本类型而存在的,但是在Java中String类型确是一个实实在在的引用类型,是可以通过new关 ...
- 带码农《手写Mybatis》进度3:实现映射器的注册和使用
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- C# 利用反射动态创建对象——带参数的构造函数和String类型
C# 利用反射动态创建对象——带参数的构造函数和String类型 最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好, ...
- 揭秘String类型背后的故事——带你领略汇编语言魅力
字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s=“a1a2···an”(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数 ...
- Redis系列(四):数据结构String类型中基本操作命令和源码解析
1.介绍 string类型本质上是char[]数组的封装 中文网:http://www.redis.cn/commands.html#string 2.常用命令 set 命令 set命令的时间复杂 ...
随机推荐
- gulp入门教程
第1步:安装Node 首先,最基本也最重要的是,我们需要搭建node环境.访问 nodejs.org,下载完成后直接运行程序,就一切准备就绪.npm会随着安装包一起安装,稍后会用到它. 为了确保Nod ...
- 读javascript高级程序设计00-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- JavaScript的面向对象编程(OOP)(二)——原型
关于JavaScript的原型模式,下面的是学习后的个人理解,若是有偏差,还请指出,谢谢 JavaScript原型模式 1.什么是原型? 原型是一个对象,其他的对象可以通过它实现属性的继承,所有的对象 ...
- CheckedListBoxControl 实现复选框的单选与多选功能
由于工作需要,需要实现复选框的单选与多选功能,找了好多资料都不是很全,经过两天苦苦的挖挖挖,终于完成啦O(∩_∩)O哈哈~ 用DEV控件中的CheckedListBoxControl控件,当然VS中的 ...
- C# 模拟webform里面按钮的点击事件
生成的html内容 <body> <form method="post" action="./Login.aspx" id="for ...
- C#最齐全的上传图片方法。
public ActionResult Upload() { string imgurl = ""; foreach (string key in Request.Files) { ...
- RPM
1.安装RPM 使用-ivh选项即可,能查看安装信息和进度. 例如: #RPM -ivh XXX.rpm RPM升级与更新,使用-Uvh选项或者-Fvh选项,两者略有区别. -Uvh选项:后面接的软件 ...
- 高性能 Oracle JDBC 编程
了解如何利用连接和语句池特性来提高 Oracle 驱动的 JDBC 程序的性能.作者:Yuli Vasiliev2009 年 4 月发布使用诸如连接池和语句池等池技术可以显著提高数据库密集型应用程序的 ...
- Redis学习笔记~实现消息队列比MSMQ更方便
什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次 ...
- opacity背景层透明导致文字也透明
如果想要文字和背景分开,即背景透明了,但是文字不影响 解决方法:高级浏览器用background:rgba();来解决 低级浏览器,给文字层加相对定位 http://www.360doc.com/co ...