Java基础(一)——equals和==的区别

来源:互联网 发布:linux rpm下载 编辑:程序博客网 时间:2024/06/05 14:43

    Java程序中,测试两个变量是否相等有两种方式,一种是利用==运算符,另一种是利用equals()方法。下面这篇博文就简单的介绍一下这两者的不同。


    一、"==方法"

    

    当我们使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型,只要这样个变量的值相等,就将返回true。

    当我们使用==来判断两个引用类型变量是,只有它们指向同一个对象时,==判断才会返回true,需要注意的是,==不可以用于比较类型上没有父子关系的两个对象。


    示例代码:

package cn.gome.c_object;public class TestEqual{public static void main(String[] args) {//====================1.数值类型变量======================int it = 65;float f1 = 65.0f;//将输出trueSystem.out.println("65和65.0f是否相等?"+(it==f1));char ch = 'A';//将输出trueSystem.out.println("65和'A'是否相等?" + (it == ch));//====================2.引用类型变量======================String str1 = new String("hello");String str2 = new String("hello");//将输出falseSystem.out.println("str1和str2是否相等?" + (str1 == str2));}}


    二、equals()方法


    Object对象的equals()方法:equals()方法是Object类提供的一个实例方法,因此所有引用变量都可以调用该方法类判断是否与其他引用变量相等,使用这个方法和==运算符没有区别,同样要求两个引用变量指向同一个对象才会返回true。


    String对象的equals()方法:String重写了Object的equals()方法,String的equals()方法判断两个字符串相等的标准时,只要两个字符串所包含的字符序列相同,通过equals()比较将返回true。


    示例代码:

package cn.gome.c_object;public class TestEqual{public static void main(String[] args) {//====================1.Object的equals()======================Object o1 = new Object();Object o2 = new Object();//Object对象的equals方法:将返回falseSystem.out.println("o1是否equals o2?"+(o1.equals(o2)));//====================2.String的equals()======================String str1 = new String("hello");String str2 = new String("hello");//将输出falseSystem.out.println("str1和str2是否相等?" + (str1 == str2));//String对象的equals方法:将输出trueSystem.out.println("str1是否equals str2?" + (str1.equals(str2)));}}


    三、"hello"和 new String("hello")的区别


    当Java程序直接使用形如"hello"的字符串直接量(包括可以在编译时就计算出来的字符串值)时,JVM将会使用常量池来管理这些字符串;

    但使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。换句话说,new String("hello")一共产生了两个字符串对象。


    示例代码:

package cn.gome.c_object;public class StrintTest {public static void main(String[] args) {//s1直接引用常量池中"周江霄"String s1 = "周江霄";String s2 = "周江";String s3 = "霄";//s4可以在编译时确定下来,直接引用常量池中"周江霄"String s4 = "周江" + "霄";//s5不在编译时就确定下来,不能引用常量池中的字符String s5 = s2 + s3;//s6使用new构造器将会创建一个新的String对象,引用对内存中新创建的String对象String s6 = new String("周江霄");System.out.println(s1==s4);//返回trueSystem.out.println(s1==s5);//返回falseSystem.out.println(s1==s6);//返回false}}

     以上就是对==和equals()方法的一些简单介绍,回顾一些这些最最基本的概念,是不是也挺有趣的?



0 1