看我的注释中的解释
- 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①*/
- }
- }
复制代码
希望对你的理解有一定帮助 |