Java面试那点事——基础1911

1. == 和 equals 的区别?拆箱和装箱分别是什么?分别应用在什么场景?

  • 未重写的equals和== 是等价的:对于基本类型,比较的是值;对于引用类型,比较的是引用地址。但是我们可以重写equals方法,让equals方法比较我们想要比较的东西,比如说对于引用对象,不在比较引用地址而是比较内容,这里要注意的地方,第一,基本类型是不能调用equals方法的;第二引用类型的包装类都是重写了equals方法,使其比较值
  • 拆箱和装箱:拆箱是把包装类型变成基本类型;装箱是把基本类型编程包装类型。
  • 应用场景:当== 两边是基本类型和包装类型的时候,包装类型会拆箱,然后==会比较基本类型的两个值;当equals方法的参数是基本类型的时候,基本类型会装箱,然后equals方法会先比较两个包装类型的类型,在比较值。

2. String str="i"与 String str=new String(“i”)一样吗?为什么?字符串常量池的位置?字符串常量池存储的内容?

  • str=" “会在字符常量池创建字符字面量或者引用;str= new String(”")会在堆中创建对象。所以二者是可以相同的(之前的版本是不一样的,但是现在的jdk,字符串常量池存储的是字符串字面量或者引用),只要在堆中创建字符串对象,然后调用intern方法(字符串常量池存在String,就返回String,不存在就加入引用),然后新建的str = “” 就会与堆中的引用保持一致。
  • 字符串常量池的位置,jdk1.7从方法区移至堆中。
  • 字符串常量池存储的是字符串字面量和引用

3.给定三个变量:i1、i2、i3。Integer i1 = 120;Integer i2 = 120;int = 120;i1和i2一样吗?i1和i3呢?为什么?如果把120换成130呢,i1,12,i3的关系又如何,为什么?

  • integer包装类和其他包装类不同之处,对于范围在-128到127之间的整数,integer创建对象的时候是直接从缓存读取的,这个时候直接从缓存得的的内容地址是保持一致的,所以两个integer对象地址是相同的,但是不在这个范围的时候,地址就不在相同的。对于integer变量和int变量,通过==比较,符合拆箱应用场景,integer会直接拆箱,所以无论什么范围,integer和int,都是直接比较值的。
Integer i1 = 120;
Integer i2 = 120;
int = 120;
System.out.println(i1==i3);//true
System.out.println(i1==i2);//true

Integer i1 = 130;
Integer i2 = 130;
int i3 = 130;
System.out.println(i1==i3);//true
System.out.println(i1==i2);//false

【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

发布了147 篇原创文章 · 获赞 835 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/qq_33945246/article/details/103006865