作者darkk6 (Mr. Pan)
看板java
标题Re: [问题] 请教String的问题
时间Thu Dec 18 15:54:28 2014
※ 引述《kdok123 (小天)》之铭言:
: 我这边的问题很简单,因为有观念是"string 是 final类不能修改"
不太对, String 被定义成 final 类别是指
不能被继承
public final class String { .... }
自己测试看看:
http://ideone.com/VbYiMc
: 但我自己简单测试了一下却测试不出来?
: 测试1:
: String a = "hello";
: a = "haha"
: sout(a);
: 输出: haha
: 问题1: 不是说不能修改吗? 到底是什麽时候不能修改呢?
从
┌───┐
a ───→│hello │
└───┘
===========================
变成
┌───┐
a ─┐ │hello │
不能变动的,是方块中的这个文字
│ └───┘
│ ┌──┐
└─→│haha│
└──┘
所以输出的是 haha , 不是 hello
: 问题2:
: 诚如上面的ex1,我认为String是一个class,所以若是执行
: str2 = "kdok123";
: 应该要可以被更改(因为value是跟着object走的)
: 所以我才认为这边不是call by value的观念(因为不管call by 什麽object的value都是
: 跟着object走的,看object传到哪就改到哪)
看完上面和我刚刚回的文你再来重新想看看这个问题
应该会有另一层理解
: 举例来说
: 我宣告一个calss test{
: int a;
: }
: 并实例化 test ob = new test();
: 我不管在哪里执行 ob.a = whatever int;
: 都是可以修改的
: 不知道大家有看出我的困惑点在哪吗?
: 重复一次
: 1:String到底什麽时候不能被修改?
String
物件的值(文字)不能被修改
String str1 = "XDD"
str1 是变数
"XDD" 是 String 物件实体 (instance)
out.println(str1); 会输出 "XDD" 是因为 str1 指向 "XDD" 这个实体
你可以改 str1 指向的东西,但不能改 "XDD" 的内容
========================
String str = "XDD"
str = "ABC"
---------------
错误: ┌──┐
str ──→│XDD │
└──┘
----- 变成 -----
┌──┐
str ──→│
ABC │
// 字串是 immutable
└──┘
---------------
正确: ┌──┐
str ──→│XDD │
└──┘
----- 变成 -----
┌──┐
str ─
┐ │XDD │
│ └──┘
│ ┌──┐
└→│ABC │
└──┘
: 2:String如果是一个class,value应该跟着跑的不是吗?
: 打得有点乱,感谢大家的回应
: 补充一下: 我的ex1把String改成Integer还是不能修改的,所以我才没找到
: "String不能修改的特性"
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.164.118.189
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1418889276.A.62D.html
※ 编辑: darkk6 (218.164.118.189), 12/18/2014 16:02:50