美文网首页
Java学习日记1

Java学习日记1

作者: 有幸的风 | 来源:发表于2018-08-31 21:43 被阅读0次

    先看代码:
    public class Main {
    public static void main(String[] args){
    int[] arr = new int[3]; //动态初始化,创建3块连续的空间
    System.out.println(arr);
    }
    }
    首先说一下栈,堆。栈最典型的特点就是先进先出,在Java程序执行的过程中, .class文件首先被装入内存,栈储存局部变量,即定义在方法声明上和方法中的变量;堆用来储存new出来的数组或对象。此外还有方法区、本地方法区和寄存器等。


    图片.png

    上图为上述代码的内存图。

    再看以下代码:
    public class Main {
    public static void main(String[] args){
    int[] arr = new int[3]; //动态初始化,创建3块连续的空间
    System.out.println(arr);
    arr[0] = 10;
    arr[1] = 20;
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    }
    }
    执行结果如下:


    图片.png

    在这里,直接打印arr产生的结果 [I@4554617c 表示什么呢?
    直接打印数组名,结果为[I@4554617c ,其中[表示数组的维数,有几个就代表几位数组,I表示数组为int型,@是默认的,最后的4554617c代表数组的地址。
    内存图如下:


    图片.png

    如果定义一个arr2并让他等于arr;那么其实这两个数组引用指向的是同一个内存块,改变其中任意一个,都是对内存块中的数据进行操作。
    下图表示新建arr1和arr2两个数组,然后定义arr3=arr2,并对其进行操作:


    图片.png

    二维数组的内存图如下:


    图片.png
    此外再多说一个知识点:基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失;引用数据类型的值传递,改变原值,因为即使方法弹栈,但是对内存数组对象还在,可以通过地址继续访问。

    Java中到底是传值还是传址?
    java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令 (Java之父))。

    相关文章

      网友评论

          本文标题:Java学习日记1

          本文链接:https://www.haomeiwen.com/subject/sdvewftx.html