public class StringTest {
public StringTest() {
}
public static void main(String[] args) {
StringTest temp = new StringTest();
String a = new String("bbbbbbbbbbb");
temp.change(a);
System.out.println(a);
}
public void change(String temp){
temp = "aaaaaaaaaaaa";
}
}对于类型我知道他是引用。。但是为什么会输入bbbbbbbbbbb呢?
public StringTest() {
}
public static void main(String[] args) {
StringTest temp = new StringTest();
String a = new String("bbbbbbbbbbb");
temp.change(a);
System.out.println(a);
}
public void change(String temp){
temp = "aaaaaaaaaaaa";
}
}对于类型我知道他是引用。。但是为什么会输入bbbbbbbbbbb呢?
public String change(String temp){
temp = "aaaaaaaaaaaa"; return temp;
} and String a = change(a);
http://java.ccidnet.com/art/3737/20050527/472879_1.html
难道String类型 只是传递的副本?
按照你的说法...除开数组是引用传递(传递的是地址),其他的全是值传递了哦(传递副本)
那我传递其他的类型就不会..比如说Vector....
我把那个地址从新引用了bbbbbbbbbbbb
那个地址的值就应该是bbbbbbb了。。
不解............
但是如果这样的话我又晕了..
他是引用类型为什么传递的是副本呢?
String是引用类型。为什么会传递的是副本呢?
然后将遥控器a复制一个副本temp,temp也就理所当然指向电视机bbbbbbbbbb了.
接着你将遥控器temp指向了另一台电视机aaaaaaaaaaaaaa.
请问现在遥控器a还是控制电视机bbbbbbbbbbbbb吗?lz好好体会一下.
java基本类型(byte、int、char、long、float、double、boolean和short)是传值,也就是传的是副本,而其余传的是引用(所谓引用传递就是把对象的引用地址传进函数,而不是像值传递那样产生一个副本),对于字符串对象来说,虽然在参数传递的时候也是引用传递,但是java虚拟机在函数内部对字符串对象进行了特殊处理--视String对象为常量(final) 所以对传进来的引用地址所引用的string对象比能直接进行修改,而是产生一个副本对其进行操作,对其进行的操作不会影响原来的值。
String a="aaaa";
void chang(String temp) {
temp="bbbb";
}
public static void main(String[] args) {
change(a);
}
}
这段代码的执行过程是:
1. 加载类Test
2. 初始化成员变量a, a指向内存的dataStack的字符串"aaaa"
3. 进入main()方法
4. 调用change方法,把a的值传给temp.这时temp的值就是"aaaa"
5. 调用temp="bbbb"这一句,temp的值改变为"bbbb";
6. change(a)调用结束.
可以发现,a的值其实没有改变.
class op
{
public static void main(String[] agrs)
{
aa a=new aa();
a.w="bbbbb";
maa(a);
System.out.println(a.w);
}
static void maa(aa x)
{
x.w="aaaaa";
}
}
class aa
{
String w;
}
public class StringTest {
public StringTest() {
}
public static void main(String[] args) {
StringTest temp = new StringTest();
String a = new String("bbbbbbbbbbb");
a=temp.change(a);
System.out.println(a);
}
public String change(String temp){
temp = "aaaaaaaaaaaa";
return temp;
}
}