关于为什么此类问题,都能列出12345...种种原因 已创建具体的值不可修改,故本身就是线程安全的,放到多线程中也不会担心被修改,支持在多线程中共享自身 . 因为字符串是不可变的,所以在它创建的时候HashCode就被缓存了,不需要重新计算.这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象.这就是HashMap中的键往往都使用字符串. 如果字符串是可变的,那么会引起很严重的安全问题.譬如,数据库的用户名.密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程…
转载请注明出处: jiq•钦's technical Blog - 季义钦 String的不可变性 Java规定String是不可变的(immutable).事实上这个不可变具备两层含义: 1 内容不可变 不论什么看起来改动它们的操作.实际上都是又一次new出一个对象. String s = new String("111"); String newS = s; newS = "dsfsd"; System.out.println(s); //111 假设不能做到内…
首先我们使用new创建一个String对象的时候比如: String str=new String("123"); 这句话里面创建了两个对象,第一个在系统中创建了一个"abc"这个字符串: 然后在创一个Str对象,然后在让"123"这个字符串的引用: 创一个String对象相当于创了两个. 在说说为啥String类设置为final类型. fianl类型,是一种不能被修改的类型. 试想,如果我对 str=str.toUpperCase(); 为啥这…
String和包装类Integer\Double\Long\Float\Character\Boolean 都是final类型 不可以改变…
(转自:http://www.cnblogs.com/ikuman/archive/2013/08/27/3284410.html) 最佳答案: 主要是为了“效率” 和 “安全性” 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final. 其它答案一: String和其他基本类型不同,他是个对象类型.既然是对象类型,如果是在静态方法下是必须调用静态方法或值的,如果是非静态的方法,就必须要实例化. main函数是个static的.所以…
String的源码如下: public final class String implements Serializable, Comparable<String>, CharSequence{ priviate final char value[]; private int hash; ... } String本身是一个名为value的char数组,String中并没有提供任何value的set方法,因此在外部是没有办法改变value数组中的内容. value是final类型的,意味着val…
---今天面试碰到个这样的问题:String在设计的时候为什么要设计成final的  当时回答的是String功能已经很丰富了,不需要对其进行扩展,所有巴拉巴拉. 现在来正确看看为什么定义成final的吧 首先,Final来修饰一个类,只有一个作用,就是不让此类被继承. 好,那么String为什么不让其他类继承呢,网上看来看去,最靠谱的说法就是保证安全性,(其实也就是因为String的不可变性.) 先看String内部结构: public final class String implement…
为什么匿名内部类参数必须为final类型转自于:http://feiyeguohai.iteye.com/blog/1500108 1)  从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的 2)  为什么JAVA中要加上一条限制:只能访问final型的局部变量? 3)  JAVA语言的编译程序的设计者当然全实现:局部内部类能访问方法中的所有的局部变量…
如果你对final和不可变类型的概念与区别有疑问的话,可以打开这篇文章.希望我的解答可以帮到您! 1.不可变类型: 什么是可变类型,什么是不可变类型呢? 首先我们看一下下面的这行代码: String s=new String("a"); s=s+"b";System.out.println(s); 只要你懂得一点java,那么你一定可以推测出最后的结果是"ab". 但是,事情其实并没有那么简单.如果你debug这三行代码,会发现一个"微…
辛巴学院:正大光明的不务正业. 中秋节快乐,每逢佳节倍思亲,尤其是那素未谋面的老婆,对吧,屌丝们.   今天我们来探索一下C#里面奇怪的计算,奇怪的类型. 奇怪的计算 当我刚刚接触计算机编程的时候,一切在我看来都是奇怪的. i++i=i+1i==i+1 这都是些什么鬼? 机器语言是图灵机模式的,那玩意不是人类语言,是关于操作寄存器的. 附:图灵机视频地址测试版: http://v.youku.com/v_show/id_XMTM0MDg0NjUxMg==.html?from=y1.7-1.2 高…