java基础-equals和==

本文详细解析了Java中==运算符与equals方法的区别及使用场景,包括基本类型与引用类型的区别,String常量池的概念及其对性能的影响,并探讨了equals方法在Object类中的默认行为及其重写原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


对于java来说比较两个变量是不是相等有两种方式 第一种通过等号运算符,第二种通过equals()方法

==运算符

==运算符比较分为两种情况 一种是比较的是基本类型的变量,一种是引用类型的变量,在比较基本数据类型的时候 只要是数值相等就返回true ,否则返回false,而引用类型的变量只有他们指向同一个对象的时候才会返回true。


public class EqualsTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
     int i = 64;
     float f1 = 65.0f;
     System.out.println("64h和64.f是不是相等"+(i==f1));
     char ch = 'A';
     System.out.println("64h和'A'是不是相等"+(i==ch));
     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)));
//     System.out.println("str1和str2是不是相等"+("hello"==new EqualsTest());
     
     
	}

}

备注:"hello"和 new String(“hello”)的区别
hello会直接使用常量池来保存当前的字符串
new String(“hello”) 先会通过常量池保存当前的对象然后通过new 关键字创建一个String对象

String 常量的创建和重复的使用

只要你定义了的字符串在下载使用的时候就不会在创建而是从常量池中取

public class StringCompantTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/***
		 * s1直接引用常量池中的常量 编译的时候就存在了
		 */
		String s1 = "栾小黑";
		/***
		 * s2直接使用常量池中的常量
		 */
		String s2 = "栾";
		/***
		 * s3直接使用常量池中的常量
		 */
		String s3 = "小黑";
		
		String s4 = "栾"+"小黑";
		String s5 = "栾"+"小"+"黑";
		String s6 = s2+s3;
        /***
         * 新建的一个字符串对象		
         */
		String s7 = new String("栾桂明");
		System.out.println(s1==s4);
		System.out.println(s1==s5);
		System.out.println(s1==s6);
		System.out.println(s1==s7);
		
		
		
	}

equals方法的使用

equals方法是object对象提供的一个方法,他的作用是和==相同的不过我们可以对这个方法进行覆盖,实现在即认为的相等的机制,如String类中重写了这个方法实现的是比较两个字符串的数值是不是相等

public class PrintObject {
   public static void main(String[] args) {
	    Person person = new Person("xiaohei",23);
	    Person person2 = new Person("xiaohei",43);
	    /***
	     * 此处调用的是Object对象的toString()方法返回的是 类名 +@ +hashCode
	     * 如果向调用某个类的toString()来获取对象的描述需要重写toString()方法
	     */
	    System.out.println(person);
        /***
         * 由于重写的equals没有实现逻辑而是直接返回true
         * 因此 person是和什么对象都相等的	    
         */
	    System.out.println(person.equals(new EqualsTest()));
	    System.out.println(person.equals(new PrintObject()));
	    System.out.println(person.equals(person2));
	    
   }
}

equals方法应该满足的条件

  • 自反性:
  • 对称性:
  • 传递性:
  • 一致性:
  • 对于任何部位null的对象和equals()做比较均返回false
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值