Re: [问题] 请教String的问题

楼主: kdok123 (小天)   2014-12-18 15:31:57
※ 引述《kdok123 (小天)》之铭言:
: ex1:
: public static void main(String[] args){
: String str1 = "Hello";
: System.out.println(str1);
: tell(str1);
: System.out.println(str1);
: }
: public static void tell(String str2){
: str2 = "kdok123";
: }
: 输出: Hello
: Hello
: 结论: 因为String的值不能被修改
: ex2:
: class Ex2{
: String temp = "Hello";
: }
: public class Ex2Demo{
: public static void main(String[] args){
: Ex2 e1 = new Ex2();
: e1.temp = "kdok";
: System.out.println(e1.temp);
: tell(e1);
: System.out.println(e1.temp);
: }
: public static void tell(Ex2 str2){
: str2.temp = "kdok123";
: }
: }
: 输出:kdok
: kdok123
: 问题:为什么这边的String就可以被修改呢?
: java新手,问题有点浅,我觉得印出来的应该是新new出来的String,并不是原本那一个
: 但还是不太确定,希望有人可以帮我解释一下
我这边的问题很简单,因为有观念是"string 是 final类不能修改"
但我自己简单测试了一下却测试不出来?
测试1:
String a = "hello";
a = "haha"
sout(a);
输出: haha
问题1: 不是说不能修改吗? 到底是什么时候不能修改呢?
问题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到底什么时候不能被修改?
2:String如果是一个class,value应该跟着跑的不是吗?
打得有点乱,感谢大家的回应
补充一下: 我的ex1把String改成Integer还是不能修改的,所以我才没找到
"String不能修改的特性"

Links booklink

Contact Us: admin [ a t ] ucptt.com