【秋招冲刺-每日打卡】应届生JAVA岗-每日5道高频面试题【Day2】-基础篇(2)

简介: 【秋招冲刺-每日打卡】应届生JAVA岗-每日5道高频面试题【Day2】-基础篇(2)

文章大纲

一: float f = 6.6 这个代码是否有问题?

追问1: short s1 = 1; s1 = s1 + 1;存在问题吗,存在则具体说明,short s1 = 1; s1 += 1;存在问题吗?

二: &和&&的区别?

三: Math.round(2.5) 等于多少?Math.round(-2.5)等于多少?

四: switch(condition)中,condition的值可以是哪些类型?

五: 当两个对象x、y的equals方法为true时,他们的hashCode方法返回的值可以是不同,这个说法正确?

追问1: 重写equals方法应该注意哪些事项

追问2: 重写equals方法应该大概包含哪些内容

每日小结

image.png

大家好,这里是IT学习日记,一个非双一流大学毕业的深漂族,年少曾憧憬大厂,面试过许多家公司,也曾踩过无数坑,深知面试技巧和知识广度与深度对一个应届生乃至工作多年的开发者的重要性。

故特意收集了各个公司、大厂的面试高频题,通过每天打卡的方式,和大家一起记录和学习,希望能够帮助到应届生和开发者们少走弯路,一起冲向大厂!!!

image.png

一: float f = 6.6 这个代码是否有问题?


  有,在JAVA语言中,默认小数是双精度(double),而float是单精度类型,使用float接收双精度的数值,相当于向下转型(down-casting),会造成精度丢失,因此需要强制类型转换即float f = (float)6.6或者在数值后指定类型即float f = 6.6F;

image.png

追问1: short s1 = 1; s1 = s1 + 1;存在问题吗,存在则具体说明,short s1 = 1; s1 += 1;存在问题吗?


  s1 = s1 + 1存在问题,无法通过编译。因为1是int类型在JAVA语言中占4个字节,而short类型在JAVA中占2个字节,使用short类型接收,则表明需要强制类型转换即写成:想要编译通过需要写成: s1 = (short) (s1 + 1);



  short s1 = 1; s1 += 1;写法没有错误,可以正常编译,"+="是一个复合运算符,JAVA编译器会对它进行特殊处理,它包含了隐式的强制类型转换,相当于s1 = (short)s1 + 1;

image.png

二: &和&&的区别?


  1、&运算符有两种用法:


  (1)按位与: 具体的含义是参与运算的两数各对应的二进制位相与,只有对应的两个二进位均为1时,结果位才为1 ,否则为0。


  (2)逻辑与: 要求左右两边的条件都为true时,返回的结果才为true,否则为false。

image.png

2、&&运算符也叫短路与运算,特点如下:


  (1)、如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。只有运算符两边的条件都为真时,才会返回true。


  (2)、它的运用场景很多,合理运用可以避免空指针,如判断用户名不是null且不为空字符串时,使用username != null &&!username.equals(“”),运算符的条件顺序不能调换,否则会出现空指针。


  (3)、逻辑或运算符(|)和短路或运算符(||)的差别也是相似,短路或运算符(||)只要运算符左边的条件为真,则不运行右边的条件判断,直接返回true。



三: Math.round(2.5) 等于多少?Math.round(-2.5)等于多少?


  round方法的作用是四舍五入,Math.round(2.5)的返回值是3,Math.round(-2.5)的返回值是-2。四舍五入的原理是在参数上加0.5然后进行下取整(向下取整表示取更小的值)。

image.png

四: switch(condition)中,condition的值可以是哪些类型?


 1、Java5以前,switch(condition)中,condition只能是byte、short、char、int(包括它们的包装类型)类型的值。


 2、Java5开始,Java中引入了枚举类型,condition也可以是enum类型的值


 3、Java7开始,condition还可以是字符串(String),但是长整型(long),浮点数(float)到目前为止还不支持。

image.png

五: 当两个对象x、y的equals方法为true时,他们的hashCode方法返回的值可以是不同,这个说法正确?


 这个说法是错误的!当x.equals(y)时,它们的hash code也应该相同。对于equals和hashCode方法Java中有以下的规定:


 1、如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;


 2、如果两个对象的hashCode相同,它们equals并不一定相同,只能说明两个对象在散列存储结构中,存放在相同的一个位置。


 3、如果违背了上面两点的规范,那么在使用容器的时候,在Set集合中可能出现相同的对象,增加元素的效率会大大下降,频繁的哈希冲突会导致性能大大的下降。



追问1: 重写equals方法应该注意哪些事项


 如果重写了一个对象的equals方法,那么一定要重写这个对象的hashCode方法,目的是为了保证equals方法相同的对象拥有相同的hashCode,《Effective Java》书籍中写到重写equals需要注意以下事项:


 1、自反性: 针对非空的x,使用x.equals(x)应该返回true



 2、对称性: 针对x,y,如果x.equals(y)为true,那么y.equals(x)也应该为true



 3、传递性: 如有x,y,z,存在x.equals(y)和y.equals(z)都为True,那么x.equals(z)也应该为true



 4、一致性: 如果比较对象未发生改变,则反复调用equals方法应该返回同样的结果



 5、对于任意的非空x,x.equals(null)应该返回false



追问2: 重写equals方法应该大概包含哪些内容


 一个好的equals方法重写应该具有以下的特点:


 1、使用==操作符检查”,判断参数是否为这个对象的引用”;


 2、使用instanceof操作符检查”参数是否为正确的类型”;


 3、对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;


 4、编写完equals方法后,要判断它是否满足自反性、对称性、传递性、一致性;


 6、重写equals时总是要重写hashCode;


 7、不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。



每日小结


  不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!


  欢迎大家关注,如果觉得文章对你有帮助,不要忘记一键三连哦,你的支持是我创作更加优质文章的动力,希望大家都能够早日拿到心仪的Offer,有任何面试问题可以私信我,欢迎大家投稿面试题目哦!


相关文章
|
17小时前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
17小时前
|
Java
[Java 面试题] ArrayList篇
[Java 面试题] ArrayList篇
|
1天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
8 1
|
1天前
|
存储 安全 Java
每日一道Java面试题:说一说Java中的泛型?
今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它。
3 0
|
21小时前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
5 0
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
1天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
6 0
|
1天前
|
监控 安全 Java
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
7 2
|
1天前
|
安全 Java
Java基础教程(15)-多线程基础
【4月更文挑战第15天】Java内置多线程支持,通过Thread类或Runnable接口实现。线程状态包括New、Runnable、Blocked、Waiting、Timed Waiting和Terminated。启动线程调用start(),中断线程用interrupt(),同步用synchronized关键字。线程安全包如java.util.concurrent提供并发集合和原子操作。线程池如ExecutorService简化任务管理,Callable接口允许返回值,Future配合获取异步结果。Java 8引入CompletableFuture支持回调。
|
2天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
15 0