黑马程序员技术交流社区
标题:
返回值的疑问
[打印本页]
作者:
IT人
时间:
2014-1-7 11:29
标题:
返回值的疑问
class Test
{
public static void method_2(StringBuilder sb1,StringBuilder sb2)
{
sb1.append(sb2);//这条代码执行以后 sb1的内容是javahello,返回时一个引用,但是楼主并没有定义一个变量接收
sb1 = sb2;//这里sb1的值变成了hello,没有返回值
sop(sb1.equals(sb2));//true//这个也没有返回值
}
public static void method_1(String s1,String s2)
{
s1.replace('a','k');
s1.replace('a','k');
s1 = s2;
sop(s1.equals(s2));//true
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
String s1 = "java";
String s2 = "hello";
method_1(s1,s2);
sop(s1+"------"+s2);
StringBuilder sb1 = new StringBuilder("java");
StringBuilder sb2 = new StringBuilder("hello");
method_2(sb1,sb2);//当我们调用的时候应该没有返回值,但是下边的打印结果显示,sb1的内容变成了javahello,请大神解释一下
sop(sb1+"------"+sb2);
}
}
打印结果是true
java------hello
true
javahello------hello
我的疑问已经在上边有标注,这个程序是借用的贴吧的一个帖子!先谢谢那个楼主!让我得到一点新发现
作者:
闺蜜配男友‘好
时间:
2014-1-7 12:33
这个返回值 是有一定含义的!!
作者:
李兴
时间:
2014-1-7 12:45
看我的注释中的解释
class Test
{
public static void method_2(StringBuilder sb1,StringBuilder sb2)
{
/*由于形参sb1(下面记为sb1①,以区分实参),sb2(下面记为sb2①)为main函数中实参sb1,sb2的分别的引用,什么是引用呢,
* 就是给变量起了一个别名。就是同一个变量
* */
sb1.append(sb2);//这条代码执行以后 sb1的内容是javahello,返回时一个引用,但是楼主并没有定义一个变量接收
/* 这里没问题,就是将sb2①追加sb1①中 ,也就是将sb2追加sb1中,sb1的值为javahello,sb2为hello*/
sb1 = sb2;//这里sb1的值变成了hello,没有返回值
/* 这里就有问题了,将sb1①这个引用关联到sb2①上,使其指向sb2①这个变量,
* 因为sb2①是sb2的引用, 所以sb1①也就是sb2的引用
* sb1这个变量就只有这一个名字,sb1①不再是他的别名了,就不是一个变量了。
* 现在sb1的值为javahello,(sb1①的值为sb2①的值 也为sb2的值hello)
* */
sop(sb1.equals(sb2));//true//这个也没有返回值
/*sb1①与sb2①现在就是一个变量,所以返回true*/
}
public static void method_1(String s1,String s2)
{
s1.replace('a','k');
s1.replace('a','k');
s1 = s2;
sop(s1.equals(s2));//true
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
String s1 = "java";
String s2 = "hello";
method_1(s1,s2);
sop(s1+"------"+s2);
StringBuilder sb1 = new StringBuilder("java");
StringBuilder sb2 = new StringBuilder("hello");
method_2(sb1,sb2);//当我们调用的时候应该没有返回值,但是下边的打印结果显示,sb1的内容变成了javahello,请大神解释一下
sop(sb1+"------"+sb2);
/*这里调用的就是sb1与sb2了,不是sb1①和sb2①*/
}
}
复制代码
希望对你的理解有一定帮助
作者:
王新年
时间:
2014-1-7 14:27
StringBuilder 不是基本类型,当调用 method_2(sb1,sb2)时此时传递的是引用,所以当在该方法时修改sb1或sb2的值时被传递的值也将会被修改所以在该方法被调用时sb1的内容变成了javahello
求技术分
作者:
IT人
时间:
2014-1-7 15:46
谢谢!明白了!
作者:
午夜b'Boy
时间:
2014-1-7 16:21
哦 sb1 = sb2;是sb1指向的地址值变成sb2,
而sb1.原来指向的地址,值不变(append方法会改变),main函数中还持有他的引用,被打印了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2