class Data{
public int m;
}
...
void half(Data d) {
D.m /= 2;
}
public int m;
}
...
void half(Data d) {
D.m /= 2;
}
解决方案 »
- 关于GridBagLayout和GridBagConstraints的使用
- 简单问题,java文件读入的时候,如何动态分配缓存大小?100分
- 【小测试】用递归的方法,颠倒整型数组的数据顺序
- java中怎么计算一个线程(或一个程序的)运行时间和占用的内存量?
- dom4j验证xml文件
- 高分求助:SDK 1。4安装中的一个问题!
- 9牛2虎之力写好的程序,有错误,不会改,求大神指点,刚学java
- 请高手指点:I/O包里的类太多了,请问怎么学习?
- java程序不能运行?
- 日期对象GregorianCalendar的bug ?
- 请教怎么运行这个程序!
- 很疑惑,用接口继承一个类时子类并不会有父类的具体代码,那么这样继承过来有什么用?
当把Data d传给half(),我们可以改d中的内容.但d指向的地址不变.
整个程序应该是:
class Data{
public int m;
}
public class CallByValue
{
static void half(Data d)
{
d.m /= 2;
System.out.println("half方法d.m="+d.m);
}
public static void main(String args[])
{
Data d = new Data();
d.m=Integer.parseInt(args[0]);
System.out.println("调用half之前d.m="+d.m);
half(d);
System.out.println("调用half之后d.m="+d.m);
}
}
这段程序没有用编译器验过,可能会有小错. :-)
这是一个传值和传址的问题。是基本类型与对象类型的区别。
{
static int half(int n)
{
n=n/2;
System.out.println("half方法n="+n);
return n;
}
public static void main(String args[])
{
int m=Integer.parseInt(args[0]);
System.out.println("调用half之前m="+m);
m=half(m);
System.out.println("调用half之后m="+m);
}
}
buf.append("abc"); //StringBuffer可改,String是不可改的
外部变量也是指向那地址, 它也就变了.如果你把指针指向的地址改了:
buf = new StringBuffer("abc");
外部变量还是指向老地址,不会变.
不必拘泥于名词,关键是理解.我认为所有调用都是传值,传址只是传值的特例,值是地址罢了.