Equals和==的区别

class EqualsTest 
{
	public static void main(String[] args) 
	{
		String str1 = new String("我是邵永阳");
		String str2 = new String("我是邵永阳");

		System.out.println(str1.equals(str2));	//equals 比较的是变量的值。
		System.out.println(str1 == str2);
		//这个其实都在堆中保存,其实比较的是str1的内存地址是否和str2相等。不相等。为false

		String str3 = str1;
		System.out.println(str3.equals(str1));

		String N_str1 = "我是邵永阳";
		String N_str2 = "我是邵永阳";	//这两个变量都在栈中保存,栈可以共享内容。都指向一个内存地址。所以为true
		String N_str3 = N_str1;

		System.out.println(N_str1 == N_str2);	//为TRUE,以为变量分配与栈内存,栈内存特点在于快,共享
		System.out.println(N_str3 == N_str1);	//为TRUE,因为直接是对象赋值


		String No_1 = new String("这个放堆里面");

		String No_2 = "这个放栈里面";

		System.out.println(No_1 == No_2);		//这个不用想都不一样。不解释
	}
}

1、区分变量的值是放在栈中还是堆中?

2、栈的优势在于内容能够共享于多个相同值的变量、读取速度快。堆放的是对象的值。读取速度慢。


String str = new String("这个"); //可以看到str存储的是New出来的引用地址

String str1 = "这个"; //这个放栈里面,没有New,值先放栈里。

System.out.println(str == str1); //这个输出结果为false。比较的是内存地址。

System.out.println(str.Equals(str1)); //这个比较的是两个变量的值。虽然不一块内存区域,但是值相同


总结:

Equals比较的是值,也就是变量的内容。==比较的是内存地址。结合着栈和堆的区别来判断为True和False.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值