首页 新闻 会员 周边

结果为什么是a a a aA

0
[待解决问题]

public class Test02 {

public static void process(String str) {

str="A";
}

public static void process(StringBuffer sb) {

sb=new StringBuffer();
sb.append("A");

}
public static void process(String str ,StringBuffer sb) {

str=new String("A");
sb.append("A");
}

public static void main(String[] args) {
String str="a";
StringBuffer sb=new StringBuffer("a");
process(str);
System.out.println(str);
process(sb);
System.out.println(sb);
process(str, sb);
System.out.println(str);
System.out.println(sb);

}
}

暮鼓晨钟TWH的主页 暮鼓晨钟TWH | 菜鸟二级 | 园豆:202
提问于:2018-04-18 22:10

建议给代码加上高亮并说明一下所用编程语言

dudu 6年前
< >
分享
所有回答(2)
0

我也是java,你这个主要是你没区分开局部变量和全局变量的区别。还有一个就是StringBuff类的append方法的作用原理,这个方法的作用原理主要是指针那里的,所以你最后一个输出结果是aA,而String类的+=或者new String()都相当于创建一个副本重新赋值,所以你输出后看到的结果还是你自己定义的时候给定的结果

public class r {

 

public static void process(String str) {

//局部变量

str = "A";

}

 

public static void process(StringBuffer sb) {

 

// sb = new StringBuffer();

// sb.append("A");

 

sb.append("A");

 

}

 

public static void process(String str, StringBuffer sb) {

//局部变量

str = new String("A");

// 指针变化

sb.append("A");

}

 

public static void main(String[] args) {

// 初始值str

String str = "a";

// 初始值sb

StringBuffer sb = new StringBuffer("a");

 

process(str);

// 这里输出的是初始值str,不是你方法中的str

System.out.println(str);

process(sb);

// 这里输出的是初始值sb,不是你方法中的sb

System.out.println(sb);

process(str, sb);

System.out.println(str);

// 这个sb因为是直接使用的append方法,没有创建新的副本,所以这个值在原来的基础上加上你后面的赋值

System.out.println(sb);

 

}

}

西红柿里没有番茄 | 园豆:645 (小虾三级) | 2018-04-19 08:52

谢谢

支持(0) 反对(0) 暮鼓晨钟TWH | 园豆:202 (菜鸟二级) | 2018-04-19 10:32
0

传值和传址的问题吧

毛毛虫 | 园豆:437 (菜鸟二级) | 2018-04-23 10:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册