Java基础阶段常见面试题汇总
- java的八种基本数据类型是什么?
byte:字节型,用于存储整数,占用 1 个字节,范围 -128 ~ 127,默认值是 0 short:短整型,用于存储整数,占用 2 个字节,范围 -32768 ~ 32767,默认值是 0 int:整型,用于存储整数,占用 4 个字节,范围 -2^31 ~ 2^31-1,默认值是 0 long:长整型,用于存储较大的整数,占用 8 个字节,范围 -2^63 ~ 2^63-1,默认值是 0L float: 单精度浮点数,用于存储小数,占用 4 个字节,不能表示精确的值,默认值是 0.0F double:双精度浮点数,用于存储小数,占用 8 个字节,不能表示精确的值,默认值是 0.0D boolean:布尔型,用于存储 true 和 false,占用 1 个字节,默认值是 false char:字符型,采用 Unicode 字符集编码,用于存储单个字符,占用 2 个字节,范围 0 ~ 65535
- switch能作用在哪些类型的变量上?
可以作用于:byte,short,int,char,String,枚举类型,其它类型都是不允许的
- 重写与重载的区别?
重写:发生在父子类中,方法名相同,参数列表相同 --当派生类觉得超类的行为不好时,可以通过重写来修改超类中的方法 重载:发生在同一类中,方法名相同,参数列表不同 --是完全不同的方法,只是正好方法名相同而已
- 实例变量与静态变量的区别?
1)实例变量:属于对象的,在创建对象时存储在堆中,创建了多少个对象,则实例变量就会在堆中存储几份,需要通过引用打点来访问 2)静态变量:属于类的,在类被加载时存储在方法区中,无论创建了多少个对象,静态变量在内存中都只有一份,常常通过类名打点来访问
- java是值传递还是引用传?
java中无论是基本类型还是引用类型,都是值传递 1)对于基本类型而言,传递的是具体的值的副本 2)对于引用类型而言,传递的是具体的地址的副本
- String str = new String("abc"); 创建了几个字符串对象?
答:2个 第一个:字面量"hello" ---java会创建一个String对象表示字面量"hello",并将其存入常量池 第二个:new String() ---new String()时会再创建一个字符串对象,并引用hello字符串的内容
- ==和equals()的区别
- ==若为基本类型则比较的是具体的值是否相同
short s1 = 1; long l1 = 1; // 结果:true。类型不同,但是值相同 System.out.println(s1 == l1);
-
==若为引用类型则比较的是引用的地址是否相同
Integer i1 = new Integer(1); Integer i2 = new Integer(1); // 结果:false。通过new创建,在内存中指向两个不同的对象 System.out.println(i1 == i2);
-
equals()是在Object类中定义的,内部比较的还是引用的地址是否相同, 但是比较地址没有参考意义, 所以常常需要去重写equals()来比较对象的数据是否相同. Java中的String中已经重写了equals()来 比较字符串的内容是否相同
Integer i1 = new Integer(1); Integer i2 = new Integer(1); // 结果:true。两个不同的对象,但是具有相同的值 System.out.println(i1.equals(i2)); // Integer的equals重写方法 public boolean equals(Object obj) { if (obj instanceof Integer) { // 比较对象中保存的值是否相同 return value == ((Integer)obj).intValue(); } return false; }
- ==若为基本类型则比较的是具体的值是否相同
- 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对。hashCode() 和 equals() 之间的关系如下: 当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成立, 反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不一定为 true。
- String和StringBuilder、StringBuffer的区别?
String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。 StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全,是同步处理的,性能稍慢。 StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,是并发处理的,具有更高的性能,推荐优先使用。
本文完!
写在结尾:
2022 年 9 月 24 日 一个java菜鸟,发布于北京海淀。
好记性不如烂笔头,持续学习,坚持输出~今天是持续写作的第5天。可以点赞、评论、收藏啦。