大家好,又到了今天的知识分享时刻,最近一阶段小编会把整理出来的Java易错的面试题陆续的分享出来,后续我们再分享一些有难度的,有兴趣的朋友可以关注一下哦,好了,话不多说,请看题:
1、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math 类中提供了三个与取整有关的方法:ceil、floor、round 。
ceil 的英文意义是天花板,该方法就表示向上取整;
Math.ceil(11.3) 的结果为12,Math.ceil(-11.3)的结果是-11;
floor 的英文意义是地板,该方法就表示向下取整;
Math.ceil(11.6) 的结果为11,Math.ceil(-11.6) 的结果是-12;
round 方法:它表示“四舍五入”,算法为 Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整。Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
2、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的,另外final修饰的方法不能被重写,修饰的类不可被继承,修饰的成员变量不可改变。
比如:final StringBuffer a=new StringBuffer("abc");
执行如下语句将报编译错误;
a=new StringBuffer("123");
但是,执行如下语句则可以通过编译;
a.append("def");
3、super.getClass( )方法调用结果?
下面程序的输出结果是多少?
public class Test extends Date {
public static void main(String[ ] args) {
new Test().test( );
}
public void test( ) {
System.out.println(super.getClass().getName());
}
}
很奇怪,结果是 Test,在 test 方法中,直接调用 getClass().getName( ) 方法,返回的是 Test 类名,原因在于:由于 getClass( ) 在 Object 类中定义成 了final,子类不能覆盖该方法,所以,在 test 方法中调用getClass().getName( ) 方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName( )方法,所以,super.getClass( ).getName( ) 方法返回的也应该是 Test。如果想得到父类的名称,应该用如下代码:getClass( ).getSuperClass( ).getName( );
4、String, StringBuffer, StringBuilder的区别?
String 类是 final 修饰的,该类所表示的字符串对象不可变,一旦发生改变即创建新对象, 当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池 (一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象) 中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量池,然后引用它。
StringBuffer 和 StringBuilder 是可变字符串对象,对字符串的修改操作不会创建新对象,都是在原有对象基础上进行修改,内部有很多操作字符串的方法,比如append()等。另外StringBuffer是线程安全的,同步处理的,性能稍慢;StringBuilder是非线程安全的,并发处理的,性能稍快。
感觉小编分享的有用的话,记得关注哦!