学习日记-==和equals的区别

来源:互联网 发布:贵金属软件下载 编辑:程序博客网 时间:2024/06/02 02:39

 ----------- android培训java培训、期待与您交流! ------------

==和equals的区别

在学习的过程中发现有两个判断相等的方法就是“==”和equals,但是就是不明白为什么会有两种方法来判断,它们相等,我想它们肯定会有区别,经过自己的实验和查资料现在将一些心得和小例子分享给大家。

当使用==来判断两个变量是否相等时,如果两个变量是基本的数据类型,并且是数值类型时,则只要两个变量的值相等就会输出true但是对于引用类型的变量,他们必须要指向同一个对象时,使用==才会判断其相等输出true,但是需要注意的是,==不可用于比较类型上没有父子关系的两个对象。

下面是一个测试程序:

public class EqualTest
{
 public static void main(String[] args)
 {
  int it = 65;
  float fl = 65.0f;
  //将输出true
  System.out.println("65和65.0f是否相等?" + (it == fl));
  char ch = 'A';
  //将输出true
  System.out.println("65和'A'是否相等?" + (it == ch));
  String str1 = new String("hello");
  String str2 = new String("hello");
  //将输出false
  System.out.println("str1和str2是否相等?"
   + (str1 == str2));
  //将输出true
  System.out.println("str1是否equals str2?"
   + (str1.equals(str2)));
  //由于java.lang.String与EqualTest类没有继承关系,
  //所以下面语句导致编译错误
  System.out.println("hello" == new EqualTest());
 }
}

在此需要知道常量池的概念,常量池是专门用于管理在编译期间被确定并被保存在已编译的class文件中的一些数据,它包括了关于类的方法接口中的常量,还包括字符串常量。

下面是另一个测试程序:

public class  StringCompareTest
{
 public static void main(String[] args)
 {
  String s1="长大了";
  String s2="长大";
  String s3="了";
  String s4=new String("长大了");
 
  System.out.println(s1==(s2+s3));//输出true;
  System.out.println(s1==s4);//输出false;
 }
}

 ----------- android培训java培训、期待与您交流! ------------