String s1=new String("abc");
s1是对象吧?但是下面的代码输出结果是abc,说明是值调用不是引用调用.
public void returnStr(String str){
str="nnnnn";
}public static void main(String[] args) {
Teststr teststr = new Teststr();
String s1=new String("abc");
teststr.returnStr(s1);
System.out.println(s1);
}
为什么传的是对象 却不是引用调用呢??矛盾啊!难道s1不是对象吗?
哪位高手帮我解释一下啊 谢谢了
s1是对象吧?但是下面的代码输出结果是abc,说明是值调用不是引用调用.
public void returnStr(String str){
str="nnnnn";
}public static void main(String[] args) {
Teststr teststr = new Teststr();
String s1=new String("abc");
teststr.returnStr(s1);
System.out.println(s1);
}
为什么传的是对象 却不是引用调用呢??矛盾啊!难道s1不是对象吗?
哪位高手帮我解释一下啊 谢谢了
在java里只有值传递
这和对象,引用好像没关系吧。只是涉及到变量作用范围。
换句话说,s1="abc"和s1="nnnnn"应该用到了2个不同的引用。不知道这么解释对不对。。好像越说越乱了。。
当执行 returnStr方法时,只是使returnStr方法里的局部变量str="nnnnn"(会新产生一个String对象),再者传参是传值的
自己看看吧
public String returnStr(String str){
return str="b";
}
public static void main(String[] args) {
TestCSDN teststr = new TestCSDN();
String str1="a";
System.out.println(teststr.returnStr(str1));
System.out.println(str1);
}
}对比下,自己看看咯
String str=s1;
str="nnnnn"; 这样结果是:
s1="abc";
str="nnnnn";
因为str="nnnnn";就等于str=new String("nnnnn");
只是对str赋了两次值,怎么会影响到s1?????
楼主的例子等同
例如以下语句:
class test
{
void testValue(int k)
{k=k*3;} public static void main(String[] args)
{int i=3;
test test1=new test();
System.out.println("first i="+i)
test1.testValue(i);//这里传递的是变量 i 的值,而不是变量i,而且方法运行后,方法的参数(i)就不再使用了.
System.out.println("last i="+i)
}
}
输出结果:
first i=3
last i=3所以,一个方法是不可能修改一个基本数据类型的参数的值的。除非通过对象引用。