为了账号安全,请及时绑定邮箱和手机立即绑定

string究竟可不可以改变引用?

string究竟可不可以改变引用?

胡子哥哥 2019-04-18 17:15:41
各位大佬,最近关于string的问题始终没有想明白,希望有大神能够指点。这里有几个问题:1、        String a = "a";         a.concat("b");         System.out.println(a); //输出:a         a = "b";         System.out.println(a); //输出:b         a = new String("c");         System.out.println(a); //输出:cstring源码里是final修饰的类,我看到源码中concat方法是返回一个新字符串对象,知道第一个输出是a,但是后面为什么还是可以直接赋值或者new对象?2、上面那种重新赋值得到的a究竟是引用变了,指向了新的字符串,还是改变了原来的字符串内容?3、为什么重新用final修饰以后,        final String a = "a";         a = "b";  //编译通过         a = new String("c"); //编译错误string类的final和这里的fianl究竟是怎么回事呢?4、为什么源码里final修饰的char[]也可以直接赋值?public final class String     implements java.io.Serializable, Comparable<String>, CharSequence {     /** The value is used for character storage. */     private final char value[];     /** Cache the hash code for the string */     private int hash; // Default to 0public String(String original) {         this.value = original.value;         this.hash = original.hash;     }
查看完整描述

4 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

类的final是不能被继承
属性上的final是引用的对象不能变,但是里面的值可以变
1.concat()是新建了一个String,把两个字符串拼起来,a还是没变,而后面两种都是改变了引用
2.改变了引用,String对象不可变
3.两种赋值都是不允许的,final属性不可以赋值
4.源码的value[]这个变量的引用不可变,但是这个数组里的内容可以变

查看完整回答
反对 回复 2019-05-16
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

String这个类是Final修饰的,表示该类不可被继承重写。属性用final修饰表示该属性为常量,不可修改内容


查看完整回答
反对 回复 2019-05-16
  • 4 回答
  • 0 关注
  • 1036 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信