这里我要明说一下,不是Java初级和学习Java的千万不要乱看,否则~~~~
你会怀疑人生,因为会浪费你时间啊!!!
本次考点是Java初级开发工程师面试必备的一些东西!!!
1、数据类型
基本类型
byte/8、short/16、int/32、long/64、boolean/ 、char/16、float/32、double/64
boolean
只有两个值,true
、false
,可以使用1bit
来存储,但是具体大小没有明确规定,JVM
会在编译时期将boolean
类型转为int,使用1来表示true
,0表示false
。JVM
支持boolean
数组,但是是通过读写byte
数组来实现的。
包装类型
基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。
Integer x=2 //装箱,调用了Integer.valueOf(2)
int y=x //拆箱 调用了 X.intValue()
缓存池
new Integer(123)与Integer.valueOf(123)的区别在于:
new Integer(123)每次都会新建一个对象
Integer.valueOf(123)会使用缓存池中的对象,多次调用会取得同一对象的引用。
Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y); // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k); // true
valueOf()
方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。
2、String
概览
String被声明为final,因此它不可被继承。(Integer
等包装类也不能被继承)
在java8中,String 内部使用char数组存储数据。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
在java9之后,String类的实现改用byte数组存储字符串,同时使用coder
来标识使用了那种编码。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final byte[] value;
/** The identifier of the encoding used to encode the bytes in {@code value}. */
private final byte coder;
}
value 数组被声明为final
,这意味着value
数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String
不可变。
不可变的好处
1、可以缓存hash值
因为String的hash值经常被使用,例如String用作HashMap
的key。不可变的特性可以使得hash值也不可变,因此只需要进行一次计算。
2、String Pool的需要
字符串常量池,如果一