字符串不变性保证了hash码的唯一性,因此可以放心地进行缓存.这也是一种性能优化手段,意味着不必每次都去计算新的哈希码. 在String类的定义中有如下代码:
privateinthash;//用来缓存HashCode
3. 安全性
String被许多的Java类(库)用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患。
假如有如下的代码:
booleanconnect(strings){
if(!isSecure(s)){
thrownewSecurityException();
}
//如果在其他地方可以修改String,那么此处就会引起各种预料不到的问题/错误
causeProblem(s);
}
总体来说, String不可变的原因包括 设计考虑,效率优化问题,以及安全性这三大方面. 事实上,这也是Java面试中的许多 "为什么" 的答案。
相关文章:
String对象不可改变的特性
String is passed by “reference” in Java
十大常见Java String问题
Java中Set的contains()方法
------------------------------------------------------------------------------------------
15)你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?
多线程和并发程序中常遇到的有Memory-intece、竞争条件、死锁、活锁和饥饿。问题是没有止境的,如果你弄错了,将很难发现和调试。这是大多数基于面试的,而不是基于实际应用的Java线程问题。
补充的其它几个问题:
1)在java中绿色线程和本地线程区别?
2)线程与进程的区别?
3)什么是多线程中的上下文切换?
4)死锁与活锁的区别,死锁与饥饿的区别?
5)Java中用到的线程调度算法是什么?
6)在Java中什么是线程调度?
7)程中你怎么处理不可捕捉异常?
8)什么是线程组,为什么在Java中不推荐使用?
9)为什么使用Executor框架比使用应用创建和管理线程好?
10)在Java中Executor和Executors的区别?
11)如何在Windows和Linux上查找哪个线程使用的CPU时间最长?
///////////////////////////////
0、Java中多线程同步是什么?
在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。
1、解释实现多线程的几种方法?
一Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。
2、Thread.start()与Thread.run()有什么区别?
Thread.start()方法(native)启动线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run()方法。

3、为什么需要run()和start()方法,我们可以只用run()方法来完成任务吗?
我们需要run()&start()这两个方法是因为JVM创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的start方法来完成,start由本地方法实现,需要显示地被调用,使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了Runnable接口,这就避免因继承了Thread类而造成的Java的多继承问题。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32844-4.html
唉你哦