易截截图软件、单文件、免安装、纯绿色、仅160KB

JAVA的参数传递机制

参数传递机制主要有两种:值调用(call-by-value),引用调用(call-by-reference)。
值调用(call-by-value):会对实在参数求值(如果是表达式)或拷贝(如果是变量)。这些值被放在属于被调用过程的响应形式参数的内存位置上。
引用调用(call-by-reference):实在参数的地址作为相应的形式参数的值被传递给被调用者。在被调用者的代码中使用形式参数时,实现方法是沿着这个指针找到调用者指明的内存位置。因此,改变形式参数就像改变了实在参数一样。C++就是用的引用调用。
看上去JAVA的调用也仿佛是引用调用,而直到最近,我才弄明白,原来JAVA是值调用的。也就是说,当JAVA程序里的实在参数是变量时(非表达式),函数会为实在参数复制一个变量给形式参数,该变量的指针与实在参数的指针一样,都指向了实在参数所对应的内存地址,即对象。而在函数内部修改形式参数所对应的对象的值的时候,其实就是修改了实在参数所指向的那个对象,也就是说他们指向同一个对象。但,假如在函数内部改变了对形式参数的引用,比如将形式参数的引用指向了另一个对象,此时函数对形式参数所指对象的修改就变成了对新对象的修改,而实际参数所指向的对象并没有改变。简单点说,就是:无论是否在函数内将形式参数的引用改变,实际参数的引用都不会改变。
JAVA编译器通过对变量引用的方式,实现了引用调用的功能,用的却是值调用,以至于当变量被传递给函数调用后,不论什么情况,该变量所指的对象不会变。
下面的程序简单地证明了以上的调用机制。
private static int[] argumentTest(int[] input){

System.out.println("here come the input's items :");
for (int i : input)
System.out.print(i + " ");
System.out.println();

input = new int[]{1,2,3};

System.out.println("the input's reference has been changed here, you can see the current input's items :");
for (int i : input)
System.out.print(i + " ");
System.out.println();

return input;
}

public static void main(String[] args) {

int[] input = new int[]{3,2,1};

int[] output = argumentTest(input);

System.out.println("the input's reference has been changed in function argumentTest,but out of the function, the input remains the same as the one before invoked by argumentTest :");


相关文档:

日期类加减及Java中日期类操作算法大全

1.计算某一月份的最大天数
1Calendar time=Calendar.getInstance();
2time.clear();
3time.set(Calendar.YEAR,year); //year 为 int
4time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
5int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在使用set方法之前,必须 ......

java日期处理

 转: http://hi.baidu.com/jiong0818/blog/item/93f9b21641294b4d20a4e971.html Java中日期格式转换 /** * 字符串转换为java.util.Date
* 支持格式为 yyyy.MM.dd G 'at' hh:mm:ss z 如 '2002-1-1 AD at 22:10:59 PSD'
* yy/MM/dd HH:mm:ss 如 '2002/1/1 17:55:00'
* yy/MM/dd HH:mm:ss pm 如 '2002/1/1 17:55:00 p ......

java与乱码

UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现。
汉 ......

java小技巧(一)

在很多数据库中,“性别”这一字段是用于int类型存储的,如用0表示“女”,1表示“男”。使用ResultSet对象rs接收查询数据,在获取数据时时,rs.getString()方法和rs.getInt()方法获取的仍然是0(区别在于String类型或是int类型)。而在实际应用时,我们更希望获得的数据是直观地显示“男 ......

解析Java对象的equals()和hashCode()的使用

在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况
下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下,这两个函数最好是自己设计,才能确保整个程序的正常运行。最常见的是当
一个对象被加入收集对象(collection
ob ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号