Java基础面试题解析(下)

17. Java的基础类型和字节大小?【掌握】

考核点:基本数据类型占用空间大小。

答:

布尔型boolean:8位;

字节型byte:8位;

字符型char:16位;

短整型short:16位;

整形int:32位;

长整形long:64位;

浮点型float:32位;

双精度double:64位;

引申,boolean类型分析:

占用1个bit

理由是boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最小的存储单位。

占用1个字节

理由是虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。

占用4个字节

理由来源是《Java虚拟机规范》一书中的描述:“boolean数据类型,单独使用是4个字节,在数组中又是1个字节。

总结:

boolean类型没有给出精确的定义,《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义。

18. 数组在内存中如何分配?【重点】

考核点:数组的内存原理

答:

如果一个对象使用new关键字创建,会在堆上分配内存空间,然后返回该对象的引用;

因为数组也是一个对象,所以也会在堆上分配内存空间,然后返回该对象的引用,简单的值类型的数组,每个数组成员是一个引用到运行时常量池上的空间。

19. 在.java源文件中可以有多个类,不包括内部类?【重点】

考核点:编译机制。

答:

一个Java源文件中可以包括多个类,但是单个文件中只能有一个public类,并且该public类必须与文件名相同。

20. String是基本数据类型吗?【掌握】

考核点:String类。

答:

String类不是基本类型,而是一个引用类型。

String类是final类型的,因此不可以继承这个类、不能修改这个类。

实际编码中为了提高效率、节省空间,应该用StringBuffer类、StringBuilder类来更改字符串的值。

21. 什么是值传递和引用传递?【掌握】

考核点:值传递和引用传递。

答:

基本数据传递参数时采用值传递。值传递意味着传递了值一个副本,因此,就算是改变了值副本,也不会影响源值;

引用类型传递参数时采用引用传递。引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变会反映到传递的对象上。

22. JDK和JRE的区别是什么?【重点】

考核点:JDK的组成。

答:

Java运行时环境(JRE)是执行Java程序的Java虚拟机,它同时也包含了执行Applet需要的浏览器插件。

Java开发工具包(JDK)是完整的Java软件开发包,包含了Java开发工具(比如:JavaDoc、Javac)、JRE、Java编译器、Java SE API,可以让开发者开发、编译、执行Java应用程序。

23. 字符串常量池到底存在于内存空间的哪里?【重点】

考核点:Java内存原理。

答:

在JDK1.7之前运行时常量池逻辑包含字符串常量池,并存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代;

在JDK1.7字符串常量池被从方法区拿到了堆中,这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区,也就是hotspot中的永久代;

在JDK1.8 hotspot移除了永久代用元空间(Meta Space)取而代之,这时候字符串常量池还在堆,运行时常量池还在方法区,只不过方法区的实现从永久代变成了元空间(Meta Space)。

扩展:

Sun的JDK版本从1.3.1开始运用Hotspot虚拟机,2006年底开源,主要使用C++实现,JNI接口部分用C实现。

​Hotspot是较新的Java虚拟机,用来代替JIT(Just in Time),可以大大提高Java运行的性能。Java原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢,Hotspot将常用的部分代码编译为本地(native)代码,提高了性能。

你可能感兴趣的:(Java,java,开发语言)