用Java虚拟机分析参数传递

注:

  1. 栈帧后进先出

  2. 参数传递的实质:就是将一个方法的栈帧中某些变量的值(地址)拷贝到另一个方法的栈帧中

  3. 每次方法的执行都会产生一个新的栈帧,方法执行完栈帧消失

  4. 不同栈帧的两个变量在各自的空间中操作,互不影响

  5. 所有的值传递都在栈中执行,与堆无关

传递过程

     基本数据类型

 

 

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 ); // 参数传递

    }

}

 

 

posted on 2020-05-18 15:04  晓晓的明星  阅读(294)  评论(0)    收藏  举报

导航