这部分面试题多用于面试的热身运动,对很多找实习和准备毕业找工作的小伙伴至关重要。
访问修饰符
在 Java 中,提供了四种访问权限控制:
public
private
protected 以及什么都不写(default)
修饰符 | 当前类 | 同包 | 子包 | 其他包 |
---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✓ | ✗ |
default | ✓ | ✓ | ✗ | ✗ |
private | ✓ | ✗ | ✗ | ✗ |
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公
开( public), 对于不是同一个包中的其他类相当于私有(private)。受保护
(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私
有。Java 中,外部类的修饰符只能是public 或默认,类的成员(包括内部类)的
修饰符可以是以上四种。
short s1 = 1; s1=s1+1 和 s1+=1
对于short s1 = 1; s1 = s1 + 1;由于1 是int 类型,因此s1+1 运算结果也是int
型, 需要强制转换类型才能赋值给short 型。而short s1 = 1; s1 += 1;可以正确
编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
int 和 Integer
Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本
数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本
数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是Integer,
从Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,
Double
这里还隐藏一道面试题
public class Main {public static void main(String[] args) {Integer f1 = 127, f2 = 127, f3 = 128, f4 = 128;System.out.println(f1 == f2);System.out.println(f3 == f4);}
}
打印输出居然是 true false
当我们给一个Integer 对象赋一个int 值的
时候,会调用Integer 类的静态方法valueOf,如果看看valueOf 的源代码就知
道发生了什么。
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}
简单的说,如果整型字面量的值在-128 到127 之间,那么不会new 新的Integer
对象,而是直接引用常量池中的Integer 对象。
char变量存中文汉字
char 类型可以存储一个中文汉字,因为Java 中使用的编码是Unicode(不选择
任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法), 一
个char 类型占2 个字节( 16 比特), 所以放一个中文是没问题的。
如何实现对象克隆
有两种方式:
- 实现Cloneable 接口并重写Object 类中的clone()方法;
- 实现Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。
往期文章
金三银四面试题(一):JVM类加载与垃圾回收
金三银四面试题(二):数据库缓存的数据一致性
金三银四面试题(三):JVM内存模型
金三银四面试题(四):Full GC 和 Minor GC
金三银四面试题(五):JVM之TLAB
金三银四面试题(六):对象大小知多少
金三银四面试题(七):JVM常见面试题(1)
金三银四面试题(八):JVM常见面试题(2)
金三银四面试题(九):JVM常见面试题(3)