码迷,mamicode.com
首页 > 编程语言 > 详细

Java中==和equals方法

时间:2017-12-09 12:58:58      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:方法   ted   public   color   str1   文件中   bsp   equal   引用   

Java程序中测试两个变量是否相等有两种方式:1、== ;2、equals()方法

当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是基本数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就返回true。

但对于两个引用类型的变量,只有他们指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的两个对象。

public class EqualTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int  it = 65;
        float fl = 65.0f;
        System.out.println("65和65.0f是否相等?" + (it == fl));
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println("str1是否与str2相等?" + (str1==str2));
        System.out.println("str1是否与str2相等?" + (str1.equals(str2)));
    }

}

结果如下:

65和65.0f是否相等?true
str1是否与str2相等?false
str1是否与str2相等?true

解析:对于str1和str2,因为它们都是引用类型变量,它们分别指向两个通过new关键字创建的String对象,因此str1和str2两个变量不相等。

对初学者而言,String还有一个非常容易迷惑的地方,“hello”直接量和new String("hello")有什么区别?JVM将会使用常量池来管理这些字符串;当使用new String("hello")时,JVM会先使用常量池来管理“hello”直接量,再调用String类的构造函数来创建一个新的String对象,新创建的String对象被保存在堆内存中,换句话说,new String("hello")一共产生两个字符串变量。

 

常量池

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

public class EqualTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s1 = "helloworld";
        String s2 = "hello";
        String s3 = "world";
        String s4 = "hello"+"world";
        String s5 = s2+s3;
        String s6 = new String("helloworld");
        System.out.println("s1是否与s4相等?" + (s1==s4));//true
        System.out.println("s1是否与s5相等?" + (s1==s5));//false
        System.out.println("s1是否与s6相等?" + (s1==s6));//false
    }

}

JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本。故例子中s1和s4所引用的字符串可以在编译期就确定下来。它们引用常量池中同一个字符串对象。

使用new String()创建出来的字符串对象时运行时创建出来的,它被保存在运行时内存区(堆内存),不会放到常量池中。

但很多时候希望,程序判断两个引用变量是否相等时,也希望有一种类似“值相等”的判断规则,并不严格要求两个引用变量指向同一对象,可以利用equal()方法。

equal()方法是Object类提供的一个实例方法,因此所有引用变量都可以调用该方法来判断是否与其他引用变量相等。

Java中==和equals方法

标签:方法   ted   public   color   str1   文件中   bsp   equal   引用   

原文地址:http://www.cnblogs.com/wft1990/p/8011009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!