A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 流空有痕 中级黑马   /  2016-9-11 23:41  /  443 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么String当参数传递时不改变其值?

8 个回复

倒序浏览
为什么呢?
回复 使用道具 举报
因为String是不可改变的
回复 使用道具 举报
字符串是常量,其创建后就无法修改了
回复 使用道具 举报
画个图就知道了,
回复 使用道具 举报
因为string的值存在常量区,传参数的时候,传递的是一个引用,所以不会改变string的值,你可以把它当成一个对象去考虑。
回复 使用道具 举报
因为他是村存储在常量池中的
回复 使用道具 举报
zzdhm 初级黑马 2016-9-12 00:30:57
8#
对象里的地址值和值不可以被改变, 比如  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 是赋值是存储在常量池中的
回复 使用道具 举报
chensc 金牌黑马 2016-9-12 06:21:07
9#
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马