Java中的equal和'=='

1.’=='运算符

我们通常用’=='来比较两个变量是否相等

  • 当比较的变量是基本类型,且都是数值类型,且’=='比较的是其数值。
  • 当比较的是引用变量,只有当他们都指向同一个对象的时候才会返回true。
  • 其不可以用去在类型上比较没有继承关系的的两个变量,编译器会报错。
int it 65 ;
float f = 65.0f
//输出true
System.out.println(it == f);
char ch = 'A';
//输出true
System.out.println(ch == it);
String str1 = new String("hello");
String str2 = new String("hello");
//返回false
System.out.prinln(str1 == str2);

上面例子中由于“it”,“f”,“ch”都是基本类型且都为数值类型,因此其比较的是数值大小。
而对于“str1”,“str2”,因为它们都是引用型变量,它们分别指向两个通过new关键字创建的String对象,因此“str1”,“str2”不相等。

  • “hello”new String(“hello)的区别:当Java程序直接使用了字符串直接量(形如”hello“,包括可以在编译时就计算出来的的字符串值)时,JVM将会使用常量池来管理这些字符串;当使用new String(“hello”)来创建时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的的String对象会存放到堆内存中去,也就是说new String(“hello”)产生了两个字符串对象。
  • 常量池是专门用来管理在编译时被确定并保存在已编译的的.class文件中的一些数据。它包括了关于类,方法,接口中的常量,还包括字符串常量。
  • JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本。String对象所引用的字符串直接量可以在编译期就确定下来。使用new String()创建的字符串对象是运行时创建出来的,它被保存在运行时内存区(即堆内存中);

2.equal方法

  • 该方法属于object类,因此所有引用变量都可以调用这个方法来判断是否与其他引用变量相等,但是如果这样的话该方法和"=="来判断两个对象相等的标准和使用没有区别。
  • 很多时候,程序判断两个引用变量是否相等,也希望有一种类似于”值相等“的判断规则,并不严格要求两个引用变量指向同一个对象。这时候可以通过重写equal方法。
  • String类就重新了equal方法,该方法可以判断两个字符串对象所引用的字符串直接量是否相等。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页