81,090
社区成员
发帖
与我相关
我的任务
分享
public class testClass {
public static void main(String[] args)
{
String s="ABC";
// testClass test = new testClass();
// test.function(s);
System.out.println(s);
}
static void function(String s)
{
s="D";
// return s;
}
}
public class testClass {
public static void main(String[] args)
{
String s="ABC"; //要知道这里是s和function的s是两个方法中的变量,两个方法是不同的方法栈,所以这里的s和function方法的s是不同的两个变量
// testClass test = new testClass();
// test.function(s); //参数传递的时候,只是把这里的s的值(对象的地址)复制给function方法中的s,所以两个s的值一样,即两个s都指向同一个"ABC"对象
System.out.println(s);
}
static void function(String s)
{
s="D"; //这里改变了function方法的s,让它指向另一个对象"D",但是上面说了,这里的s和上面的s是两个方法栈的变量,是不同的,所以这个的改变不影响方法外的s的指向
// return s;
}
}
import java.lang.reflect.Field;
public class TestString {
public static void main(String[] args) throws Exception {
String str = "abc";
changeString(str);
System.err.println(str);
}
public static void changeString(String str) throws Exception {
Field field = str.getClass().getDeclaredField("value");
field.setAccessible(true);
char[] c = {
'a', 'b', 'd'
};
field.set(str, c);
}
}
//这样的帖子以前好几次了
public class Foo {
public static void main(String sgf[]) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(
a,
b);
System.out.println(a + "," + b);
}
static void operate(StringBuffer x, StringBuffer y) {//这里会拷贝引用a和b,拷贝成x和y,
x.append(y);//这时候x和a指向同一个对象,所以改变了x,也影响到了引用a!所以它为AB
y = x;//但是这里,仅仅把引用Y指向了引用x,也就是a,x,y指向同一个对象,但是原先的引用b还是指向原来的对象!!
}
}
那以这个为例,StringBuffer肯定是引用传递了,但是他会改变原来的值啊
public static void main(String[] args)
{
String s="ABC";
// testClass test = new testClass();
//无论方法内怎么处理s的引用是不能被修改的,但是可以修改引用的内容。
// test.function(s);
System.out.println(s);
}
static void function(String s)
{
s="D";
// return s;
}