用Java虚拟机分析参数传递
注:
-
栈帧后进先出
-
参数传递的实质:就是将一个方法的栈帧中某些变量的值(地址)拷贝到另一个方法的栈帧中
-
每次方法的执行都会产生一个新的栈帧,方法执行完栈帧消失
-
不同栈帧的两个变量在各自的空间中操作,互不影响
- 所有的值传递都在栈中执行,与堆无关
传递过程
基本数据类型



public class Elephant {
public void increment( int x ) {
System.out.println( "【 increment 】x = " + x );
x++ ;
System.out.println( "【 increment 】x = " + x );
}
public static void main(String[] args) {
int x = 100 ;
Elephant e = new Elephant();
System.out.println( "【 main 】x = " + x ); // 100
// 调用任意的一个方法,都会导致产生于该方法本次执行对应的 栈桢
e.increment( x ); // main 调用 e 的 increment 方法
System.out.println( "【 main 】x = " + x ); // 100
}
}
引用数据类型




public class Arab { public void sort( int[] array ) { for (int i = 0 ; i < array.length - 1 ; i++) { for (int j = 0; j < array.length - 1 - i ; j++) { if( array[ j ] > array[ j + 1 ] ) { array[ j ] ^= array[ j + 1 ] ; array[ j + 1 ] ^= array[ j ] ; array[ j ] ^= array[ j + 1 ] ; } } } } public void traversal( int[] array ) { for (int i = 0; i < array.length; i++) { System.out.print( array[ i ] + " "); } System.out.println(); } public static void main(String[] args) { Arab a = new Arab(); // 静态初始化 : 声明数组时使用 数组常量 直接对 数组进行初始化 int[] array = { 2 , 1 , 4 , 7 , 8 , 0 , 3, 5 , 6 , 9 } ; System.out.println( array ); // 类型@哈希码 System.out.println( System.identityHashCode( array ) ) ; // 排序之前遍历数组 a.traversal( array ); // 参数传递 // 对数组排序 a.sort( array ); // 参数传递 System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); // 排序之后遍历数组 a.traversal( array ); // 参数传递 } }
每一次的分享都是一份快乐
浙公网安备 33010602011771号