当前位置: 技术问答>java相关
急救…………
来源: 互联网 发布时间:2015-05-15
本文导语: 为什么结果是:AB,B 为什么不是:AB,AB ??? 实在不懂!!! public class Foo { public static void main (String [] args) { StringBuffer a = new StringBuffer ("A"); ...
为什么结果是:AB,B
为什么不是:AB,AB ???
实在不懂!!!
public class Foo {
public static void main (String [] args) {
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) {
x.append (y);
y = x;
}
}
为什么不是:AB,AB ???
实在不懂!!!
public class Foo {
public static void main (String [] args) {
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) {
x.append (y);
y = x;
}
}
|
这个问题,和你前面那个问题同出一辙。
下面总结了在Java程序设计语言中可以利用方法参数做到河不能做到的几种情况:
1。方法不能下该基本类型的参数。
2。方法可以改变对象参数的状态。
3。方法不能使一个对象参数指向一个新的对象。
对应的例子为:
//1.
public static void tripleValue(double x){
x = 3* x;
}
//2.
public static void tripeSalary(Employee x) {
x.raiseSalary(200);
}
//3.
public static void swap(Employee x, Employee y) {
Employee temp = x;
x = y;
y = temp;
}
你的程序属于第三种,即不能使一个对象参数指向一个新的对象。
如果你能找到《最新java2核心技术 卷I: 原理》的话看看page119
现在不是怎么能弄出最后的结果,而是先要理解实现机制。看看那本书,讲的很清楚。我确信你看了以后,对这方面不会存在问题,也就知道自己的程序该怎么设计和实现。
下面总结了在Java程序设计语言中可以利用方法参数做到河不能做到的几种情况:
1。方法不能下该基本类型的参数。
2。方法可以改变对象参数的状态。
3。方法不能使一个对象参数指向一个新的对象。
对应的例子为:
//1.
public static void tripleValue(double x){
x = 3* x;
}
//2.
public static void tripeSalary(Employee x) {
x.raiseSalary(200);
}
//3.
public static void swap(Employee x, Employee y) {
Employee temp = x;
x = y;
y = temp;
}
你的程序属于第三种,即不能使一个对象参数指向一个新的对象。
如果你能找到《最新java2核心技术 卷I: 原理》的话看看page119
现在不是怎么能弄出最后的结果,而是先要理解实现机制。看看那本书,讲的很清楚。我确信你看了以后,对这方面不会存在问题,也就知道自己的程序该怎么设计和实现。
|
y的作用域,如果要得出你要的结果,代码如下:
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
b=operate (a,b);
System.out.println(a + "," +b);
}
static StringBuffer operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
return y;
}
}
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
b=operate (a,b);
System.out.println(a + "," +b);
}
static StringBuffer operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
return y;
}
}
|
static void operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
}
你这方法只是传入参数y,但y并没有因此改变,全局变量y被这个方法内的y隐藏了,也就是说,y值没有被处理
x.append (y);
y = x;
}
你这方法只是传入参数y,但y并没有因此改变,全局变量y被这个方法内的y隐藏了,也就是说,y值没有被处理
|
y原是指向b,后又指向了x(a),对y的操作不会影响到b
|
public void operate (StringBuffer x, StringBuffer y) {
x.append (y);
y = x;
System.out.println("y:"+y);
System.out.println("x:"+x);
}
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
b=operate (a,b);
System.out.println(a + "," +b);
}
在函数内部输出的
y:AB
x:AB
在主函数中输出的是AB,B
这就是说结果传递的只有b,a并没有被传递。
这是变量的传值与传址的区别
x.append (y);
y = x;
System.out.println("y:"+y);
System.out.println("x:"+x);
}
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
b=operate (a,b);
System.out.println(a + "," +b);
}
在函数内部输出的
y:AB
x:AB
在主函数中输出的是AB,B
这就是说结果传递的只有b,a并没有被传递。
这是变量的传值与传址的区别
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。