Java基础面试题-7

26、Java中的Math.round(-1.5)等于多少(取整)?

等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

27、两个二进制数的异或(^),结果是什么?

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

两个⼆进制数异或结果是这两个⼆进制数差的绝对值。表达式如下:a^b = |a-b|。

两个⼆进制 a 与 b 异或,即 a 和 b 两个数按位进⾏运算。如果对应的位相同,则为 0(相当于对应的算术相减),如果不同即为 1(相当于对应的算术相加)。由于⼆进制每个位只有两种状态,要么是 0,要么是 1,则按位异或操作可表达为按位相减取值相对值,再按位累加

实例:

5 ^ 3 = ?
1、进行异或计算前会把数值都转换为二进制:
5和3转为二进制分别为:0101 、0011
     0101
     xor
     0011
    ------- 
     0110
2、再把结果 0110 转换为十进制的:6
3、所以 5 ⊕ 3 = 6

28、如何实现对象的克隆?

1、实现Cloneable接口并重写Object类中的clone()方法;

2、实现Serializable接口,通过对象的序列化和反序列化实现克隆(真正的深克隆)。

29、深克隆和浅克隆的区别?

1、浅克隆:拷贝对象和原始对象的引用类型,引用同一个对象。浅克隆只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意值,另一个值都会随之改变,这就是浅克隆。

2、深克隆:拷贝对象和原始对象的引用类型引用不同对象。深克隆是将对象及其值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深克隆。

补充

深克隆的实现就是在引⽤类型所在的类实现 Cloneable 接口,并使⽤ public 访问修饰符重写 clone ⽅法。Java 中定义的 clone 没有深浅之分,都是统⼀的调⽤ Object 的 clone ⽅法。为什么会有深克隆的概念?是由于我们在实现的过程中刻意的嵌套了 clone ⽅法的调⽤。也就是说深克隆就是在需要克隆的对象类型的类中重新实现克隆⽅法 clone()。

1、重写clone方法使用父类中的clone()方法实现深克隆

2、重写clone()方法使用序列化方法实现深克隆

30、什么是Java的序列化,如何实现Java的序列化?

对象序列化是⼀个⽤于将对象状态转换为字节流的过程,可以将其保存到磁盘⽂件中或通过⽹络发送到任何其他程序。从字节流创建对象的相反的过程称为反序列化。⽽创建的字节流是与平台⽆关的,在⼀个平台上序列化的对象可以在不同的平台上反序列化。序列化是为了解决在对象流进⾏读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现 Serializable 接⼝,该接⼝没有需要实现的⽅法,只是⽤于标注该对象是可被序列化的,然后使⽤⼀个输出流(如:FileOutputStream)来构造⼀个 ObjectOutputStream 对象,接着使⽤ ObjectOutputStream 对象的 writeObject(Object obj) ⽅法可以将参数为 obj 的对象写出,要恢复的话则使⽤输⼊流。

31、什么情况下需要序列化?

1、当你想把在内存中的对象状态保存到文件中或者数据库中的时候(持久化);

2、想用套接字在网络上传送对象的时候;

3、想通过RMI传输(远端传输)对象的时候。

posted @ 2021-10-30 18:11  栀寒烈火  阅读(70)  评论(0)    收藏  举报