每日面试题打卡(基础篇)——Day2

博主个人博客网站:文客
这个系列会长期更新!
如果你想每天和我打卡面试题、交流技术,可以关注一下我的个人博客网站:文客,我会每天在这里更新技术文章和面试题,也会及时收到大家的评论与留言,欢迎各位大佬来交流!

== 和 equals() 的区别

先说“==”

  • 对于基本类型来说,“==”判断的是两个值是否相等
  • 对于引用数据类型来说,“==”判断的是两个对象地址是否相同

equals()方法存在于Object类中,也就是说每个类都有equals()方法。equals()方法不能用于判断基本类型,只能用于判断引用类型。当我们没有重写equals()方法时,也就是使用Object类中的默认实现,它的本质是和“==”一样的,是判断两个对象的地址是否相同;当我们重写了equals()方法后,就会根据我们自定义的逻辑来判断两个对象是否相同。

hashCode() 有什么用?/为什么要有 hashCode?

hashCode()是Object类中的native方法,也就是说每个类都有hashCode()方法,在Object类中这个方法是通过C/C++实现的,该方法通常把对象的内存地址值转为整数后返回。

hashCode()的作用是获取哈希码,也叫散列码,通过哈希码可以确定对象在哈希表中的索引位置。

hashCode()还可以提高集合查重的效率。以Hashset为例,当我们向Hashset中添加元素时,首先会计算对象的hashCode值,然后再与集合中其它元素的hashCode值比较,如果没有相同的话,那么就认为没有重复,直接添加成功,如果有hashCode相同的对象的话,这时就会调用equals方法判断这两个对象是否真的相同,如果相同的话,那么Hashset就不会让其加入,如果不同的话,就会散列到别的地方去。通过hashCode()方法,大大减少了equals的次数,提升了程序的效率。

为什么 JDK 还要同时提供hashCode()和equals()这两个方法呢?

首先hashCode()方法的作用是获取对象的哈希码(也叫散列码),通过哈希码可以确定对象在哈希表中的存储位置。

equals()方法的作用是判断两个对象是否相等。

在某些集合中,hashCode()会提高容器检查重复的效率,当有重复的hashCode()时,会调用equals方法来判定两个对象是否真的相同。所以hashCode()和equals()方法既有各自的功能,又可以相互配合使用。

为什么不只提供 hashCode() 方法呢?/为什么重写 equals() 时必须重写 hashCode() 方法?

两个对象的hashCode相等并不代表两个对象真正相等。

如果equals方法判定两个对象相等,那么它们的hashCode一定相等。

如果只提供hashCode()方法,则无法判断两个对象是否真的相等。

如果重写equals()时不重写hashCode(),那么可能会出现equals为true但hashCode不相等的情况。

int 和 Integer 有什么区别?谈谈 Integer 的值缓存范围。

int是基本数据类型,Integer是引用类型

Integer是int的包装类,它们之间可以通过自动拆箱、装箱机制来相互转换

Integer在JDK5中新增的静态工厂方法valueOf,在调用它的时候会触发缓存机制,给程序带来明显的性能提升。这个值默认缓存[-128~127]之间

自动装箱与拆箱了解吗?原理是什么?

自动装箱与拆箱其实算是一种语法糖,所谓语法糖就是不同形式的程序在运行时是等价的,也就是说Java平台会自动为我们做一些转换。

装箱就是基本类型转换为对应包装类的过程

拆箱就是包装类转换为基本类型的过程

以int和Integer为例,装箱其实是调用包装类的静态工厂方法:valueOf方法,而装箱调用的是intValue()方法

如果频繁的装箱与拆箱的话,会影响程序的性能,因此要避免不必要的装箱拆箱操作

面向对象和面向过程的区别

从思想上来说,面向过程解决问题时,会将解决问题的过程拆成一个个方法,然后通过一个个方法的执行解决问题。面向对象则是将需求抽象成类,通过类去调用方法解决问题。

面向对象的程序比面向过程更易维护、易复用、易扩展。

成员变量与局部变量的区别有哪些?

  1. 成员变量可以被private等访问修饰符和static修饰,而局部变量不可以
  2. 成员变量存在于堆内存中,类变量存在于方法区(JDK8的元空间)中,局部变量存在于栈中
  3. 成员变量随着对象的创建而产生,类变量随着类的加载而产生,局部变量随着方法的调用而创建
  4. 成员变量如果没有被赋初值的话,则会自动赋予默认值,而局部变量不会自动赋值

创建一个对象用什么运算符?对象实体与对象引用有何不同?

用new。

一个对象引用只能指向一个对象实体;一个对象实体可以被多个对象引用所指向。

对象的相等与指向他们的引用相等,两者有什么不同?

  • 对象的相等是对象内容的相等,具体的判定逻辑在equals方法中
  • 指向它们的引用相等是指它们的内存地址相同

一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗?

类的构造方法主要完成对象的初始化工作。

如果一个类没有声明构造方法,系统会添加一个默认的无参的构造方法。所以能正确执行。

构造方法有哪些特点?是否可被 override?

  • 构造方法没有返回值
  • 构造方法的名字和类名相同
  • 构造方法在对象创建时自动执行

构造方法是不能被继承的,所以不能override,但是可以被重载

博客原文地址
在这里插入图片描述

你可能感兴趣的:(面试题打卡,java,面试)