java中 == 与equals()的区别

首先要了解一下Java中的存储机制(栈,堆,常量池)

public class TestDemo_01 {
	//执行main()方法,在栈中分配一块内存空间
	public static void main(String[] args) {
		/**
		声明基本数据类型
		在栈中分配一块内存,直接存放值
		*/
		int num = 10;
		/**
		字符串特殊理解
		首先也是在栈中分配一块内存
		然后,会先去看常量池中有没有"Test"
		如果有就直接将地址存入str变量的栈内存
		如果没有就在常量池中新建,再将地址存入str变量的栈内存
		注:常量池中的数据是唯一的,不可重复的
		*/
		String str = "Test";
		/**
		首先仍然是在栈中分配一块内存
		出现new关键字时,在堆中分配一块内存,同时将堆的地址存入栈中
		然后,查看常量池中是否存在"Test"
		存在则将地址存入堆内存中
		否则,新建再存入堆内存
		注:这里的String换成其他引用类型也是类似
		字符串特别处理,基本数据类型直接存值
		*/
		String strObj = new String("Test");
	}

1、 == 比较的是两个变量或者实例是不是指向同一片内存空间;
equals()比较的是两个变量或者实例指向的内存空间的值是不是相同

2、 == 值引用是否相同;equals()指值是否相同

3、 == 一般用于比较基本数据类型;equals()一般用于比较引用数据类型

上个面试题

		 String str1 ="我爱中国china";
		  String str2 ="我爱中国china";
		  String str3 ="我爱中国CHINA";
		  String str4 =new String("我爱中国china");
		  String str5 =new String("我爱中国china");
				
		  System.out.println(str1==str2);//true
		  System.out.println(str4==str5);//false
		  System.out.println(str1==str4);//false
				
		  System.out.println("----------------");
		  System.out.println(str1.equals(str2));//内容true
		  System.out.println(str4.equals(str5));//内容true
		  System.out.println(str1.equals(str4));//内容true
		  System.out.println(str1.equals(str3));//false
		  System.out.println(str1.equalsIgnoreCase(str3));//true
				
		  System.out.println(str1.compareTo(str2));//0
		  System.out.println(str1.compareTo(str3));//32
		  System.out.println(str3.compareTo(str1));//-32
		  System.out.println(str1.compareToIgnoreCase(str3));//0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值