java_==和equal方法

java测试两个变量是否相等有两种方式:

  一种是利用“==”运算符 值和对象的判断

  一种是利用equals()方法 只是值的判断

1.如果两个变量是基本类型变量,且都是数值类型(不一定数值类型严格相同),则只要两个变量的值相等,就返回true。

  例如:

    int a=65;

    float b=65.0f;

    char c="A";

    System.out.print("65和65.0f是否相等:"+(a==b));//输出true

    System.out.print("65和A是否相等:"+(a==c));//输出true

2.如果两个变量是引用类型变量,只有它们指向同一个对象时,“==”判断才会返回true,但equals()方法可以比较。“==”不可用于比较类型上没有父子关系的两个对象。

  例如:

    String a=new String("123");

    String b=new String("123");

    System.out.print("a和b是否相等:"+(a==b));//输出false

    System.out.print("a和b是否相等:"+(a.equals(b));//输出true

    //a1直接引用常量池中的“你好java”

    String a1="你好java";

    //b1的“你好”、“java”在编译时就确定下来了,直接引用常量池中的"你好java"

    String b1="你好"+"java";

    String s1="你好";

    String s2="java";

    //c1后面的字符串值不能在编译时就确定下来,所以不能直接引用常量池中的"你好java"

    String c1=s1+s2;

    //关键字new调用构造器,创建一个新的String对象,并引用变量d1指向该对象

    String d1=new String("你好java");

    System.out.print(a1==b1);//输出true

    System.out.print(a1==c1);//输出true

    System.out.print(a1==d1);//输出false

JVM使用常量池

  常量池(constant pool):专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量。

  当使用new String("你好java")时,JVM会先使用常量池来管理“你好java”直接量,再调用String类的构造器创建字符串对象。

时间: 2024-08-27 15:52:44

java_==和equal方法的相关文章

重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

转载请注明出处: http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode(),我们准备从以下几点入手分析: 1.equals()的所属以及内部原理(即Object中equals方法的实现原理) 说起equals方法,我们都知道是超类Object中的一个基本方法,用于检测一个对象是否与另外一个对象相等.而在Object类中这个方法实际上是判断两个对象是否具有相同

java——HashCode和equal方法

equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. 而hashCode()是对象或变量通过哈希算法计算出的哈希值. 之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable. 两个obj,如果equals()相等,hashCode()一定相等. 两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽

java中equal方法总结

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

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关于Object类中equal方法的理解

话不多说,先上例题 1 package Ch_11; 2 3 public class Test { 4 public static void main(String[] args) { 5 Object circle1 = new Circle(); 6 Object circle2 = new Circle(); 7 System.out.println(circle1.equals(circle2)); 8 } 9 } 10 11 class Circle { 12 double radi

hashcode(),equal()方法深入解析

首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了. 也就是说,如果集合中现在已经有

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

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

JAVA_新建一个方法并且求三个数中的最大值

package wac.wev.as;//新建一个方法在求最大值import java.util.Scanner; public class MaxLian {public static void main(String[] args){//键盘录入以及导包Scanner sc= new Scanner(System.in);//数据接收System.out.println("请输入第一个数据:");int a = sc.nextInt();System.out.println(&qu

Java面试:用set集合的时候,重写过hashcode()和equal()方法吗?有什么作用?

首先Set接口的特点: 1.它不允许出现重复元素-----------无重复 2.不保证集合中元素的顺序---------无序 3.允许包含值为null的元素,但最多只能有一个null元素. HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 1)HashSet集合排重时,需要判断两个对象是否相同,对象相同的判断可以通过hashCode值判断,所以需要重写hashCode()方法 2)hashset不能为一样的,放入一个值首先判断