黑马程序员技术交流社区
标题:
关于String的问题
[打印本页]
作者:
流空有痕
时间:
2016-9-11 23:41
标题:
关于String的问题
为什么String当参数传递时不改变其值?
作者:
流空有痕
时间:
2016-9-11 23:44
为什么呢?
作者:
wo1026756529
时间:
2016-9-11 23:58
因为String是不可改变的
作者:
tiankog
时间:
2016-9-12 00:00
字符串是常量,其创建后就无法修改了
作者:
zhangjianwin
时间:
2016-9-12 00:02
画个图就知道了,
作者:
18333601807
时间:
2016-9-12 00:11
因为string的值存在常量区,传参数的时候,传递的是一个引用,所以不会改变string的值,你可以把它当成一个对象去考虑。
作者:
huangbinqqian
时间:
2016-9-12 00:16
因为他是村存储在常量池中的
作者:
zzdhm
时间:
2016-9-12 00:30
对象里的地址值和值不可以被改变, 比如 String s = "abc" ; 那么abc就是一个对象,值一直都是abc
从源码的底层进行分析:
1,在String类的底层其实封装了一个字符数组,private final char value[];
同时在官方文档(API)里也有说明,事例如下:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
那么,也就说明刚才直接赋值的"abc"在String类的底层先把"abc"字符串转成对应
的字符数组,然后,再转成字符串的!!!
2,那么被private修饰的这个字符数组,外界不可以访问
同时String类也不可以被继承,因为被final所修饰,String类中没有提供公有的访问方式setValue() 和 getValue()
通过查看源码并没有发现,也就意味着一旦赋值后是无法改变的
3,被final修饰的引用数据类型说明地址值不可以被改变
String 是赋值是存储在常量池中的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2