JAVA基础面试题汇总集
1、java基本数据类型
2、instanceof关键字的作用
介绍:Java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。还可以用来判断子父类的所属关系。
//判断object是否是Class的实例对象,可以的子父类的所属关系
boolean result = object instanceof class
//或者当做三元运算符使用
A instanceof B ? A : C;
//需要注意一下:instanceof只适用于引用类型,基本数据类型是编译不通过的
int i = 1;
boolean flag = i instanceof Object
3、java的显式转换和隐式转换
介绍:显式类型转换也叫强制类型转换
转换规则:从存储范围大的类型到存储范围小的类型
double(8)→float(4)→long(8)→int(4)→short/char(2)→byte(1)
例子:
// 大转小
double a = 1.02;
int c = (int)a;
介绍:隐式转化有叫自动类型转换。由系统自动完成的类型转换.
转换规则:从存储范围小的类型到存储范围大的类型
byte(1)→short/char(2)→int(4)→long(8)→float(4)→double(8)
例子:
// 小转大,不需要强转,自动完成转换
int a = 10;
double b = a;
4、数组的创建方式
//方式1
int[] arr = new int[3];
System.out.println(Arrays.toString(arr));
String[] str = new String[3];
System.out.println(Arrays.toString(str));
char[] cha = new char[3];
System.out.println(Arrays.toString(cha));
//方式2
int[] arr1 = {1,2,3};
System.out.println(Arrays.toString(arr1));
//方式3
int[] arr2 = new int[] {3,4,5};
System.out.println(Arrays.toString(arr2));
输出结果:
[0, 0, 0]
[null, null, null]
[ , , ]
[1, 2, 3]
[3, 4, 5]
5、StringBuilder和StringBuffer的区别
1.StringBuilder是线程不安全的;StringBuffer是线程安全的;
2.需要探讨的问题:
a、为什么StringBuilder是线程不安全的;StringBuffer是线程安全的?
答:首先他们俩都继承的是抽象类AbstractStringBuilder;而对于StringBuilder他重写的父类方法是没有加synchronized关键字的;StringBuffer确实加上了该关键字,可以达到线程安全;
// 这是StringBuilder重写父类的append方法
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
// 这是StringBuffer重写父类的append方法
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
6、五种引用
1、强引用
介绍:如果一个对象具有强引用,GC绝不会回收它;当内存空间不足,JVM宁愿抛出OutOfMemoryError错误。一般new出来的对象都是强引用,如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了;
// 通过new创建的对象一般都是强引用
User user = new User();
//手动修改地址,指向null,中断强引用,让JVM回收
user = null;
2、软引用
介绍:软引用是用来描述一些有用但并不是必需的对象。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。JDK 1.2之后,提供了SoftReference泛型类来实现软引用。
public static void main(String[] args) {
SoftReference<String> sr = new SoftReference<String>(new String("hello"));
System.out.println(sr.get());
}