java基础(四) java基础常见面试题小总结(3)——==和equals的区别

  • 今天打王者打飘了,差点忘了我心爱的博客。
  • 今天的题目是:

一、==和equals有什么区别呢?

平时也做过一些小小的测试,比如说在我们声明两个变量以后,初始化为不同的值,去用==比较,如下图:
小测试
通过这个例子,我们可以知道在用==比较int基本类型的数据时,若是数据相等,那么就返回true
我们平常在比较两个字符串时,常用的是equals方法,如下图:
嘿嘿

那么这个==又是比较的什么呢?

回答:

关于==操作符:

  • ==操作符是专门用来比较两个变量的值是否相等,也就是说比较变量所对应的内存中所存储的数值是否相等,要比较两个基本数据类型或是引用变量是否相等,只能用==操作符。
  • 如果一个变量指向的是对象类型的,那么就涉及到了两块内存,对象本身占一块内存,其引用也占一块。 例如:
    Object object = new Object();变量object是一个内存,new Object()也占用一个内存,变量object对应的内存中存储的数值就是对象占用内存的首地址,对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,要看这两个变量所对应的内存中的数值是否相等,这个时候需要用==去比较。

关于equals方法是比较两个独立对象的内容是否相同,例如:
String a = new String(“foll”);
String b = new String(“foll”);

  • 这两条new语句创建了两个对象,而a,b分别指向其中一个对象,这两个对象是不同的,他们的首地址是不同的,即a,b中存储的数值是不同的,当用==去比较时,表达式会返回false,当用equals去比较时,两者相同,因为对象中存储的内容是相等的。

  • 在实际开发中,大部分字符串比较用到的是equals方法。如果一个类没有实现equals方法,那么它将继承Object中的equals方法,该方法默认使用==操作符,比较两个变量指向的对象是不是同一个对象。如果你希望去比较两个实例对象中的内容,那么必须要覆写equals方法。

二、关于常量池(java中的常量优化机制)

  • 再看一个例子,如下:
		int x = 127;
		int y = 127;
		Integer a = 127;
		Integer b = 127;
		System.out.println(x == y);
		System.out.println(a == b);
  • 关于这个代码的正确输出结果为:true,true

  • 但是给Integer换一个值得效果却不同了,如下图:
    变化这又是为什么呢?

  • 解答:因为Java中基本类型的包装类的大部分都实现了常量池技术,例如:byte,short,integer,long,character,Boolean,前五种在对应的数字范围内才能使用常量池。常量池的范围为:-128-127.

常量优化机制:

  • 普及到一个常量优化机制:在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,
    那么编译器javac将会直接将若干个常量表达式计算得到结果。Eg:short result = 5 + 8;——> short
    result = 13;
    看以下例题:
 public static void main(String[] args) { 
	String s="abc"; 
	String s1="a"; 
	String s2=s1+"bc"; 
	String s3="a"+"b"+"c"; 
	System.out.println(s==s2);
	System.out.println(s==s3)
	}

这个例子的输出结果应该为false,true

  1. false:因为它是一个变量和一个常量的相加。所以会产生新的地址值
  2. true:因为常量的优化机制 s3 的三个常量相加相当于 s3=“abc”;再做一系列的运算。因此输出的true
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值