Java中的==和equal

对于初学者,Java中的==和equal往往理解起来逻辑容易混乱。这里简单记录下理解二者的重点所在。

  • ==比较的是内存地址是否相同
  • equal需要分几点理解
    • object类中的equal: 也是用的==进行比较,所以也还是地址的比较
    • 其他类中的equal一般都有重写object中的equal方法,故视具体类而定。这里具体分析下String类中的equal方法(因为当时自己也理解混乱-.-)
      •   

        首先理解字符串缓冲池——可将相同字符串内容的引用指向同一内存中的内容

        •   eg1:String a="hello";String b = "hello"; //a,b引用的地址相同,因为虚拟机分配
        •       eg2:String a="hello";String b=new String("hello"); //b要求分配新内存,所以a,b引用地址不同
        •       eg3:String a="hello";String b=new String("hello");b=b.intern();//b调用java.lang.String中的方法,该方法搜索字符串缓冲池中是否有内容为“hello”的引用,如果有,返回该引用地址。所以这里a,b引用的地址相同
      •       String的equal方法
        •   字符串内容相同返回true,不同返回false。详情可查看api,例图如下:



对==和equal的理解就先写到这里,也给自己一个理解的机会啦~

时间: 2024-11-05 03:09:07

Java中的==和equal的相关文章

[转载]Java中hashCode与equal方法详解

转载自http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equa

java中的equal函数和==

这道题是我注册德问的时候做到的一道简单的概念题目.这里主要借这道题帮大家区分一下在java中"=="和equal的区别: 记住一下两句话就足够了: 1."=="比较的是地址,如果两个对象指向内存中的同一块区域的时候,即地址相同,为true,否则为false 2.equal()比较的是对象的值.

Java 中 == 和 equal 的区别 (String)

String s1 = "abcd"; String s2 = "cdfe"; s1 == s2; // 比较s1和s2这2个对象的地址,如果一样,则为true,否则为false s1.equal(s2); //比较s1和s2的内容,如果相同则为true Java 中 == 和 equal 的区别 (String),布布扣,bubuko.com

java中equal方法总结

场景:本周在完成一个公司业务功能时,在判断是否为代叫单时调用了equal方法: PublishOrderType.HELP_ORDER.equals(valetOrderExtraInfoDO.getHelpFlag()) HELP_ORDER为枚举变量,比较的getHelpFlag()返回值为Integer,使得所有情况都返回false,导致业务逻辑错误 分析原因:equal为java的Object中的方法,因此除了基本类型外其他所有类型都可以调用,Object中方法定义如下: public

JAVA中equal()和==的区别

一般认为: ==比较的是基础数据的值或者是对象的引用地址 equal()比较的是对象的内容 其实: ==和equal()都是比较的引用地址,其实是栈内存中变量(包括基本数据类型的变量和对象变量)的值 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 但是在String.Integer.Math.Double......等这些封装类中,覆盖了Object类中的equal()方法,

java中==与equal()方法的区别

java中==与equal()方法的区别 java中==比较的是地址,equal比较的是值. 示例: 1 2 3 4 Integer a1 = new Integer(456);//实例化一个对象 Integer a2 = new Integer(456);//实例化一个对象 System.out.println(a1.equals(a2));//这里比较的是值,都是456,结果是true System.out.println(a1==a2);//这里比较的是地址,因为是2个对象,所以地址不同,

java中==和equal的区别

今天看到了一篇写的很好的博客,所以就转来了 转载地址:http://xiashengchao.iteye.com/blog/753409 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同. ==比较的是2个对象的地址,而equals比较

java中 == 与 equal区别 转

java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false.JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个eq

Java中容易被你忽略的细节(一)

1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来说都是使用synchronized方法 每一个对象都有一个监视器,或者叫做锁. java用监视器机制实现了进程之间的异步执行 2.Struts框架基于MVC模式 Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xm