1. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
引用不能变,引用的对象内容可以变
2. 静态变量和实例变量的区别
实例变量属于对象的属性,必须被创建实例对象后才会分配内存空间,才能被使用。而静态变量属于类的属性,在类被虚拟机加载之后,就已经分配内存空间了,不用创建任何对象实例,就可以直接使用。
3. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行向下取整。
所谓向上取整指当计算的结果不为整数时取大于计算结果的整数,向下取整指当计算的结果不为整数时取小于计算结果的整数.当计算结果为整数时直接取整数
4. Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?
(1)重载Overload:表示同一个类(包含子类继承父类的所有方法在内)中可以有多个名称相同的方法,但这些方法名称相同,参数列表各不相同(即参数个数、参数类型、参数顺序必须有一个不同),返回类型可以不相同,异常也可以不相同。
(2)重写(覆盖)Override:表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。但是,子类方法和父类方法,名称和参数列表(包括类型、个数、顺序)必须相同,子类访问权限和父类一致或者比父类更大,子类的返回类型和父类一致或者是父类的子类型,子类抛出的异常和父类一致或者是父类的子异常。
5. java中实现多态的机制是什么?
方法的重写Overriding和重载Overloading是Java多态性的不同表现.
重写Overriding是父类与子类之间多态性的一种表现
重载Overloading是一个类中多态性的一种表现.
6. abstract的方法是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不可以
7. equals()和hashCode()的关系
(1)equals()和hashCode()是Object类的两个方法,equals()是通过“==”对两个对象进行比较,即对引用地址的比较;hashCode()是通过对象存储地址来计算的;
(2)equals()和hashcode()必须遵守以下规则:
覆盖equals()方法,就必须覆盖hashCode()方法,因为在HashMap等集合中的key,都依赖这两个方法。
如果两个对象执行equals()方法是相等的,那么执行hashcode()方法的结果也必须是相等的;
如果两个对象执行equals()方法不相等,那么执行hashcode()方法的结果可以相等页可以不相等。
(3)覆盖equals()方法的规则
做this检查,如果obj是this,则返回true;
做null检查,如果obj是null,则返回flase;
做getClass()检查,如果不属于同个类,则返回flase;
转换类型,将obj对象转换为指定类型对象
对对象的属性,根据业务逻辑进行比较
8. String、StringBuilder 和 StringBuffer 比较
运算速度比较(通常情况下):StringBuilder > StringBuffer > String
(1)String
使用final修饰,不能被继承,通常情况下效率较低,适用于少量字符串操作
(2)StringBuilder
线程不安全,效率最高,适用于单线程下在字符串缓冲区进行大量操作
(3)StringBuffer
线程安全,效率比StringBuilder低,适用于多线程下在字符串缓冲区进行大量操作
陆续更新...