java基础面试题(七)

  1. 什么是Java序列化和反序列化?
    答:序列化就是把对象转换为字节序列的过程。而反序列化则是把字节序列恢复为对象的过程。

  2. Java为什么需要序列化对象?
    答:开发中,我们经常需要让对象及其状态在多个应用间传递和共享,或者是将对象及其状态持久化,然后重新读取被保存的对象及其状态继续处理相应业务,这就需要Java的序列化来实现。

  3. 静态变量能不能被序列化?
    答:序列化的是对象,而静态变量是类级别的,所以无法序列化。

  4. Java序列化和反序列化为什么要实现Serializable接口?
    答:在Java中实现了Serializable接口后,就是标识了这个Java对象可序列化的,所以之后JVM底层会帮我们实现序列化和反序列化的操作。

  5. 为什么要在实现Serializable接口的同时最好还要指定serialVersionUID的值?
    答:首先要明白如果我们没有显式的指定serialVersionUID,那么JVM在做序列化时会根据属性会为我们生成默认的serialVersionUID,而在做反序列化时,JVM一样会根据传过来的对象的属性生成一个新的serialVersionUID,然后只有来回两个serialVersionUID的值相等,才能成功反序列化。设想下一旦对象的属性发生改变,那么生成的默认serialVersionUID也是会变化的,所以显式的指定serialVersionUID的值,那么这个serialVersionUID就不会再因为属性的变化而变化,也就保证能够反序列化成功。

  6. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    答:是值传递,因为Java 编程语言只有值传递参数。

  7. float f=3.4,是否正确?
    答:不正确。精度不正确,应该用强制类型转换,改成:float f=(float)3.4 或float f = 3.4f

  8. 单精度float和双精度double有什么区别?
    答:单精度float存储空间为4个字节,双精度double存储空间为8个字节。同时由于存储空间的不同,导致了他们所能表示的数值范围也不同。

  9. char 类型变量中能不能存储一个中文汉字,为什么?
    答:可以。因为char类型变量被用来存储Unicode编码的字符,而Unicode编码字符集里就包含了汉字,所以char类型变量自然是可以存储汉字的。不过如果是个特殊的汉字,并没有被包含在Unicode编码字符集里,那char 类型变量就不能存储这个特殊汉字。

  10. 什么时候用断言(assert)?
    答:断言功能是用于软件的开发和测试的,软件发布后,为了提高性能,断言功能通常是关闭的。也就是说即使删去了断言,程序的运行和结构都不应该有任何改变。

发布了156 篇原创文章 · 获赞 138 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104147615