对于java中String的特殊性的议论
对于java中String的特殊性的讨论
以前常听人说,我们老师也说的是:String是引用类型,但是具有基本类型的特征,他是值传递而非引用传递
通常说:
public void change(String a){
a = "234";
}
public void test(){
String a = "123";
change(a);
System.out.println(p.toString());//还是123
}
对于上面的代码,好多都会解释说因为String是值传递或者不可变的,所以改变a的值并没有改变
可以问题是:就算String是可变的类型,所谓的引用传递,也是同样的结果!
比如:
public void change(Person p){
p = new Person("李四");
}
public void test(){
Person p = new Person("张三");
change(p);
System.out.println(p.toString());//还是张三
}
这就是一个普通的类Person,不是不可变的,也不是什么值传递的,但是同样他不会改变。
java中根本就没有引用传递,只有传递引用,因为一个对象变量,本身就只是保存的一个地址
而C#之类的不同,他有ref关键字
在C#中可以这样写:
public void change(Person p){
p = new Person("李四");
}
public void test(){
Person p = new Person("张三");
change(p);
System.out.println(p.toString());//李四
}
所以对于String的另外一点:
String str1 = "123";
str1 = "234";
这就是将一个普通对象赋值给已存在的变量,并不存在String有什么特殊点。 要说特殊,也只有常量池和可以直接""构造对象的语法糖了。
最后总结的就是:对于String,把它和普通的类、对象对待,是毫无问题的
不知道这个理解有问题不
------解决思路----------------------
好吧, 刚刚大概看了看C#的引用传递, 发现是我看错了, lz首先说
我还以为讨论的是String是引用类型, 还是基本类型.
java中传递Object可能的确像lz说的是: 传递的引用,
lz举得例子个人觉得也没问题,
但是, 现在想起以前一件事, 怎么说呢, 我觉得String在参数传递等方面确实没有什么特殊之处, 但是, String和其他基本类型一样, 是其他所有类的基石, 不知道算不算特殊的地方
以前常听人说,我们老师也说的是:String是引用类型,但是具有基本类型的特征,他是值传递而非引用传递
通常说:
public void change(String a){
a = "234";
}
public void test(){
String a = "123";
change(a);
System.out.println(p.toString());//还是123
}
对于上面的代码,好多都会解释说因为String是值传递或者不可变的,所以改变a的值并没有改变
可以问题是:就算String是可变的类型,所谓的引用传递,也是同样的结果!
比如:
public void change(Person p){
p = new Person("李四");
}
public void test(){
Person p = new Person("张三");
change(p);
System.out.println(p.toString());//还是张三
}
这就是一个普通的类Person,不是不可变的,也不是什么值传递的,但是同样他不会改变。
java中根本就没有引用传递,只有传递引用,因为一个对象变量,本身就只是保存的一个地址
而C#之类的不同,他有ref关键字
在C#中可以这样写:
public void change(Person p){
p = new Person("李四");
}
public void test(){
Person p = new Person("张三");
change(p);
System.out.println(p.toString());//李四
}
所以对于String的另外一点:
String str1 = "123";
str1 = "234";
这就是将一个普通对象赋值给已存在的变量,并不存在String有什么特殊点。 要说特殊,也只有常量池和可以直接""构造对象的语法糖了。
最后总结的就是:对于String,把它和普通的类、对象对待,是毫无问题的
不知道这个理解有问题不
------解决思路----------------------
好吧, 刚刚大概看了看C#的引用传递, 发现是我看错了, lz首先说
我还以为讨论的是String是引用类型, 还是基本类型.
java中传递Object可能的确像lz说的是: 传递的引用,
lz举得例子个人觉得也没问题,
但是, 现在想起以前一件事, 怎么说呢, 我觉得String在参数传递等方面确实没有什么特殊之处, 但是, String和其他基本类型一样, 是其他所有类的基石, 不知道算不算特殊的地方