首页 > 编程语言 >java基础知识面试准备 第三天

java基础知识面试准备 第三天

时间:2024-06-22 12:01:57浏览次数:23  
标签:java 对象 重写 equals 基础知识 面试 父类 方法 hashCode

&和&&的区别

        &和&&都是Java中的逻辑运算符,用于判断两个布尔表达式的逻辑关系(&和&&的优先级不同,&&的优先级比&高),它们的区别如下:

1. &是逻辑与运算符,它的两个操作数都会被求值,只有当两个操作数都为true时,结果才为true;即使第一个操作数为false,第二个操作数也会被求值

2. &&也是逻辑与运算符,它的两个操作数都会被求值,但是当第一个操作数为false时,第二个操作数不会被求值,直接返回false;只有当第一个操作数为true时,才会继续求值第二个操作数

final 有什么用?

用于修饰类、属性和方法;

  1. 被final修饰的类不可以被继承
  2. 被final修饰的方法不可以被重写
  3. 被final修饰的变量不可以被改变

this、super关键字的用法

thissuper
含义this是自身的一个对象,代表当前对象本身super相当于是指向当前对象的父类的引用
用法
  1. 普通的直接引用,this相当于是指向当前对象本身
  2. 在构造方法里形参与成员名字重名,用this来区分
  3. 引用本类的构造函数
  1. 普通的直接引用
  2. 子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
  3. 引用父类构造函数
区别
  1. this关键字用于引用当前对象,可以用于访问当前对象的成员变量和成员方法
  2. this关键字可以省略,Java编译器会自动判断当前对象是否需要使用this关键字
  1. super关键字用于引用父类对象,可以用于访问父类的成员变量和成员方法
  2. super关键字不能省略,必须显式地指定父类的构造方法
相同点
  1. super()和this()均需放在构造方法内第一行
  2. this和super都必须在构造方法或者实例方法中使用,不能在static环境中使用;包括:static变量,static方法,static语句块
  3. this和super都可以用于访问对象的成员变量、成员方法和构造方法

构造器(constructor)是否可被重写(override) ?

        构造器(constructor)不是普通的方法,因此不能像方法一样被重写(override);构造器是用来创建对象的特殊方法,它在创建对象时被调用,用来初始化对象的成员变量。每个类都有自己的构造器,如果没有显式地定义构造器,Java会自动生成一个默认的构造器

        虽然构造器不能被重写,但是可以通过继承来实现构造器的复用;子类可以使用super关键字调用父类的构造器,从而实现对父类构造器的重用。如果子类没有显式地调用父类的构造器,Java会默认调用父类的无参构造器。如果父类没有无参构造器,子类必须显式地调用父类的带参构造器

        需要注意的是,子类的构造器必须先调用父类的构造器,然后再进行自己的初始化操作。如果子类没有显式地调用父类的构造器,Java会默认调用父类的无参构造器,如果父类没有无参构造器,编译会出错。因此,在使用继承时需要注意构造器的调用顺序和参数传递问题

重载(Overload)和重写(Override)的区别? 

        重载(Overload)和重写(Override)是Java中两个重要的概念,它们的区别如下:

定义重载指在同一个类中定义多个同名但参数类型或个数不同的方法;重写指在子类中重新定义父类中已有的方法
参数重载方法的参数类型或个数必须不同,否则会出现编译错误;重写方法的参数类型和个数必须与父类中被重写的方法相同
返回值重载方法的返回值类型可以相同也可以不同,但是不能只有返回类型不同;重写方法的返回值类型必须与父类中被重写的方法相同或是其子类
访问修饰符重载方法可以具有不同的访问修饰符,但是不能比父类中被重载的方法的访问修饰符更严格;重写方法的访问修饰符必须比父类中被重写的方法的访问修饰符更宽松
静态方法重载可以包括静态方法,但是不能只有静态性质不同;重写方法不能是静态方法
父类和子类重载方法必须在同一个类中定义;重写方法必须在子类中定义

重载的方法能否根据返回类型进行区分?

        在Java中,重载的方法不能仅根据返回类型进行区分;这是因为Java编译器在重载方法时,只会考虑方法名和参数列表,而不会考虑返回类型;如果两个方法的方法名和参数列表相同,但是返回类型不同,那么编译器会认为这是两个相同的方法,从而导致编译错误

== 和 equals 的区别是什么 

        == : 它的作用是判断两个对象的地址是不是相等;即判断两个对象是不是同一个对象(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

        equals() : 它的作用也是判断两个对象是否相等;但它一般有两种使用情况:

  • 情况1:如果一个类没有重写“equals”方法,那么它将继承Object类的“equals”方法,该方法比较的是两个对象的内存地址是否相同,即与“==”比较的结果相同
  • 情况2:如果重写了equals方法,那么就是比较内容是否相同,例如String类的equals方法就是重写了的

        String中的equals方法是被重写过的,所以String的equals方法比较的是对象的内容是否相同

hashCode 与 equals

两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

1、如果两个对象相等,则hashcode一定也是相同的

2、两个对象相等,对两个对象调用equals方法返回true

3、两个对象有相同的hashcode值,它们也不一定是相等的

为什么重写equals时必须重写hashCode方法?


        如果只重写了 equals 方法,那么默认情况下,假设存了两个自定义的内容相同的对象到Set中,Set 进行去重操作时,会先判断两个对象的 hashCode 是否相同,此时因为没有重写 hashCode 方法,所以会直接执行 Object 中的 hashCode 方法,而 Object 中的 hashCode 方法对比的是两个不同引用地址的对象,那么得到的两个Hash值是不一样的,那么 equals 方法就不会执行了,这两个对象就会被判断为不是相等的,于是就在 Set 集合中插入了两个相同的对象(这里的相同是指的内容相同)

        但是,如果在重写 equals 方法时,也重写了 hashCode 方法,那么在执行判断时会去执行重写的 hashCode 方法,此时对比的是两个对象的所有属性的 hashCode 是否相同,于是调用 hashCode 返回的结果就是 true,再去调用 equals 方法,发现两个对象确实是相等的,于是就返回 true 了,因此 Set 集合就不会存储两个一模一样的数据了,于是整个程序的执行就正常了

总结

        hashCode 和 equals 两个方法是用来协同判断两个对象是否相等的,采用这种方式的原因是可以提高程序插入和查询的速度,如果在重写 equals 时,不重写 hashCode,就会导致在某些场景下,例如将两个相等的自定义对象存储在 Set 集合时,就会出现程序执行的异常,为了保证程序的正常执行,所以我们就需要在重写 equals 时,也一并重写 hashCode 方法才行。

标签:java,对象,重写,equals,基础知识,面试,父类,方法,hashCode
From: https://blog.csdn.net/weixin_63164764/article/details/139858020

相关文章

  • 深入了解Java异常处理
    在Java编程中,异常处理是一个至关重要的概念。通过正确地处理异常,程序员可以编写出健壮且易于维护的代码,提升程序的可靠性。本文将详细介绍Java的异常处理机制,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现。一、什么是异常异常是程序运行过......
  • Java中的构造器详解
    在Java中,构造器(也称构造方法)是一种特殊的方法,用于初始化对象的状态。当创建对象时,构造器会被自动调用。以下是关于Java中构造器的详细解释:命名规则:构造器的名称必须与类名完全相同。构造器没有返回值类型,连void也没有。用途:初始化对象的属性(实例变量)。执行一些必要的操作,......
  • JavaScript基础部分知识点总结(Part5)
    注册事件(绑定事件)1.注册事件概述给元素添加事件,称为注册事件或者绑定事件。注册事件有两种方式:传统方式和方法监听注册方式传统注册方式:利用on开头的事件onclick<buttonοnclick=“alert('hi~')”></button>btn.onclick=function(){}特点:注册事件的唯一性同一个元素同......
  • 基于JAVA个人博客系统设计(论文)
    目录1引言11.1课题背景11.2国内研究情况11.3国外研究情况21.4课题研究目标及意义22相关框架和技术简介32.1semanticUI框架32.2SpringMVC框架32.3MyBatis框架32.4Spring框架32.5wangEditor插件42.6Vue框架42.7MySQL数据库42.8Tomc......
  • Android14之java层:增加系统API(二百二十)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • java集合使用中的注意事项
    集合判断是否为空判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()==0 的方式这是因为isEmpty()方法的可读性更好,并且时间复杂度为O(1)。绝大部分我们使用的集合的size()方法的时间复杂度也是O(1),不过,也有很多复杂度不是O(1)的,比如java.util.c......
  • Java爬虫入门(2) Jsoup使用
    Jsoup介绍:    一款Java对html的解析工具。Jsoup的基础使用:    导入Maven依赖:                <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version></dependency>......
  • 懂得HR的潜台词(三)——你最近都面试了哪些公司,都进展到什么阶段了?
    1、解答思路1.1【潜台词】        1)看你在市场上行情如何,是否抢手,提前预判下好不好谈薪压价        2)你会不会放我的鸽子,你来的概率大不大?  1.2【回答思路】        目前正在看机会,陆续有在面试中,也拿到了几家offer(不说公司具体名字),也会综合......
  • 又跳槽!3年java经验offer收割机的面试心得
    中厂->阿里->字节,成都->杭州->成都系列文章目录和关于我0.前言笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到成都字节。自认为自己在面试这方面有一点心得,处于记录和分享的目的便有了此文,此文纯主观,也许对3年社招的同学......
  • 063java jsp ssm企业员工培训管理系统员工培训计划培训记录管理(源码+数据库+文档)
    项目技术:Spring+SpringMVC+MyBatis等等组成,B/S模式管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/10......