Connor学Java - Day04

在这里插入图片描述

Learn && Live

虚度年华浮萍于世,勤学善思至死不渝

前言

Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/BhWFQ,话不多说我们马上开始!

1.Object的常用方法有哪些?

Object clone():用于创建并返回当前对象的一份拷贝,默认浅拷贝
Class<?> getClass():用于返回当前运行时对象的Class
String toString():返回对象的字符串表示形式
void finalize():对象被垃圾回收器回收时触发的方法
boolean equals(Object):默认用于比较两个对象的内存地址是否相等,一般需要重写
int hashCode():用于返回对象的哈希值
void notify():唤醒一个在此对象监视器上等待的线程。如果有多个线程在等待只会唤醒一个
void notifyAll():唤醒所有在此对象监视器上等待的线程
void wait():让当前对象等待
......

2.final、finally、finalize的区别?

(1)final:关键字,用于修饰属性、方法、形参和类

  • 修饰属性:属性不可变,必须初始化:①定义时显式初始化;②代码块中;③构造器中
  • 修饰方法:不可被重写
  • 修饰形参:在方法内不可修改
  • 修饰类:不可继承

(2)finally:异常处理语句结构的一部分

  • 无论try-catch中是否捕获到异常,finally中的代码一定会被执行
  • 当try-catch中出现return时,会先执行完finally中的代码后再return
  • 下面情况finally不会被执行:①程序在进入try块之前就出现异常;②在finally块中出现异常;③在前面的代码中使用System.exit()退出程序;④程序所在的线程死亡;⑤关闭CPU

(3)finalize:Object类的一个方法,由垃圾收集器在确定这个对象没有被引用时对这个对象调用,即在垃圾收集器删除对象之前调用

3.==和equals的区别?

(1)==:比较基本数据类型,比较数值是否相等;比较引用数据类型,比较对象的地址值是否相等

(2)equals:默认情况下和==等效,只有重写equals后才可以实现内容的比较,源码如下

public boolean equals(Object obj) {
	return this == obj;
}

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

不一定,如在散列表中,hashCode()相等意味着两个键值对的key的哈希值相同,但由于散列冲突的问题,哈希值相等键值对不一定相等

散列冲突:散列表的存储空间有限,当键值对数量增大时,两个不同的key使用相同的散列函数可能会得到相同的哈希值

5.为什么重写equals()就一定要重写hashCode()方法?

利用hashCode()和equals()进行判断的规定

(1)两个对象的hashCode()不相等,则两个对象一定不相等

(2)两个对象的hashCode()相等,且equals()为true,则两个对象相等

(3)两个对象的equals()相等,则其hashCode()一定相等

这个问题应该有个前提,就是你需要用到HashMap、HashSet等Java集合,用不到哈希表的化,其实仅仅重写equals()方法也可以。而实际开发的场景中常常用到Java集合,因此Java官方建议重写equals()就一定要重写hashCode()方法。

对于对象集合的判重,如果仅使用equals则需要逐个进行比较判断,此时若集合规模较大,时间开销也是很大的。但是同时使用哈希表的话,则当两个对象的hashCode()不相等时则不再需要调用equals()比较,降低时间上的开销。所以从程序实现原理上来讲,既需要equals()方法,也需要hashCode()方法,故需要同时重写这两个方法

6.&和&&的区别?

&和&&都是表示与的逻辑运算符,都表示逻辑运算符and,当两边的表达式都为true时,运算结果才为true,否则为false

(1)&&:当第一个表达式的值为false的时候,不再计算第二个表达式

(2)&:无论第一个表达式的结果为true或false,第二个都会执行。除此之外,&还可用作位运算符:当&两边的表达式不是boolean类型的时候,&表示按位与运算

7.Java中的参数传递是值传递还是引用传递?

值传递。当参数类型为基本数据类型时,传递的是其数值;当参数类型为引用数据类型时,传递的是引用指向的地址值

8.Math.round(-1.5)等于多少?

等于-1,数轴上取值向右取整

9.两个二进制数的异或结果是什么?

两个二进制数异或结果是这两个二进制数差的绝对值。即a^b = |a - b|

运算原则:两个二进制数按位进行运算。对应位相同为0,不同为1。由于二进制每个位只有两种状态(0或1),则按位异或操作可表达为按位相减取值相对值,再按位累加

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ConnorYan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值