在对Java开发还不熟练的时候,往往很多人都喜欢用==去比较两个对象是否相等,有时候就会出现很奇葩的问题。

  其实这类问题并不是奇葩问题,只是我们不够细心而已,在Java中“==”比较两个变量本身的值,即两个对象在内存中的首地址,而“equals()”比较字符串中所包含的内容是否相同,假如我们有两个String 对象:

String str1 = new String ("1号");

String str2 = new String("1号");

System.out.println(str1==str2);

上面的三条语句将打出false。原因就是str1和str2不是同一个对象,他们指向的内存地址是不同的。

String str1 = new String ("1号");

String str2 = new String("1号");

System.out.println(str1.equals(str2));

上面的三条语句将打出true。虽然str1和str2不是同一个对象,但是他们的内容是是相同的,都是“1号”,因此返回true.

String str1 = "1号";
String str2 = "1号";
System.out.println(str1 == str2);

上面的三条语句将打出true。原因是str1和str2同时引用了“1号”这个字符常量,也就是str1引用了“1号”,str2引用了“1号”,因此str1和str2的内存地址都是“1号”所对应的内存地址,至于下面的:

String str1 = "1号"; 
String str2 = "1号";

System.out.println(str1.equals(str2));

返回的是true。

关于Java中equal 和 == 的区别的更多相关文章

  1. 【转】java中equal与==的区别 其中有个缓冲区,需要注意

    转自http://www.cnblogs.com/dolphin0520/p/3592500.html 在学Java时,可能会经常碰到下面的代码: 1 String str1 = new String ...

  2. Java中equal和==区别及String创建过程

    Java中equal和==区别 1.起因 在一段Java代码中,使用了两种实现方式. //第一种命令行输入 int main (String[] args) { if(args[0] == " ...

  3. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  4. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

  5. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  6. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  7. java中a++与++a区别

    java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...

  8. c#与java中byte字节的区别及转换方法

    原文:c#与java中byte字节的区别及转换方法 在java中  byte的范围在 [-128,127] 在C#中  byte的范围在 [0,255] 所以 java程序与C#程序 进行数据传输的时 ...

  9. java中==与equel的区别

    值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地 ...

随机推荐

  1. MyBatis之基于XML的属性与列名映射

    上一博客主要是对单表的增删改查,比较简单,而且每个属性与table表的列都是一一对应名字也一样,今天主要学习属性与table表列名不一致的处理,主要有两种一是属性与列名不一致,二是枚举的情况,这里暂时 ...

  2. deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II 听课笔记

    1. 误差分析(Error analysis) 误差分析的目的是找到不同误差源的比重,从而指引我们接下来往哪个方向努力改进.NG建议手工统计随机100个错误的误差源,比如对于猫分类器,错误的照片可能是 ...

  3. 2017多校第一套&&hdu6038 思维 数学

    链接  http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意: 给你一个a序列,代表0到n-1的排列:一个b序列代表0到m-1的排列.问你可以找出多少种函 ...

  4. ceph-deploy出错UnableToResolveError Unable to resolve host

    背景 ps:在本文中,假设我系统的hostname为node1. 使用ceph-deploy命令搭建Ceph集群,执行ceph new node1时,出现如下错误: [node1][INFO ] Ru ...

  5. Spark算子--groupByKey

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/0e90fe79f9f2e4b91a5d8e659ee68eaf.html groupByKey--Transf ...

  6. phpmailer的SMTP ERROR: Failed to connect to server: 10

    请问,我在win7上学习使用phpmailer时,出现这种错误怎么处理啊? SMTP ERROR: Failed to connect to server: (0) SMTP connect() fa ...

  7. 修真院java后端工程师学习课程--任务1(day one)

    这是我从学习资料-线下报名-北京报名截取的报名截图,从图中我们可以看出我们的报名对象应该有姓名,qq,修真类型,预计入学时间,毕业院校,线上学号,日报链接,立愿,辅导师兄等属性,其中线上学号是主码. ...

  8. CSS3 [attribute^=value] 选择器

    设置 class 属性值以 "test" 开头的所有 div 元素的背景色: div[class^="test"] { background:#ffff00; ...

  9. struts文件异常Included file cannot be found

    1.命名规范,都是采用struts-xxx.xml文件,即以struts开头 2.file的路径不要以/开头,在其他版本是以/开头的 <include file="/com/bjsxt ...

  10. Lucene.net(4.8.0) 学习问题记录四: IndexWriter 索引的优化以及思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...