JAVA基础笔记——2020.9.3

99 阅读2分钟

1.String为什么要设置成不可变的

(1).字符串常量池的需要
(2).允许String对象缓存HashCode
     在Java程序中String类型是使用最多的,这就牵扯到大量的增删改查,每次增删改差之前其实jvm需要检查一下这个String对象的安全性,就是通过hashcode,当设计成不可变对象时候,就保证了每次增删改查的hashcode的唯一性,也就可以放心的操作。
(3).安全性
    网络连接地址URL,文件路径path通常情况下都是以String类型保存, 假若String不是固定不变的,将会引起各种安全隐患。就好比我们的密码不能以String的类型保存,,如果你将密码以明文的形式保存成字符串,那么它将一直留在内存中,直到垃圾收集器把它清除。而由于字符串被放在字符串缓冲池中以方便重复使用,所以它就可能在内存中被保留很长时间,而这将导致安全隐患

2.sleep和wait的区别

(1).sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。
(2).sleep不会释放锁,它也不需要占用锁。wait会释放锁,必须在synchronized中。
(3).它们都可以被interrupted方法中断。
sleep()是和其他线程在CPU层面上竞争,wait()是在线程级别上竞争。

3.为什么Java中1000==1000为false而100==100为true?

如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。如果值的范围在-128到127之间,它就从高速缓存返回实例。