数据存储之java内存空间堆栈

一:数据类型

  • 基本数据类型 byte,short, int,long, float,doble,boolean,char
  • 引用数据类型,即除了基本的变量类型之外的所有类型

二:java在内存中堆、栈两块存储空间

image.png

2.1 基本数据类型只有一块存储空间(分配在stack中)

  • 传递的时候直接是值传递
  • 对数据进行操作,不影响原先的值
    代码示例:
package chapter3;

public class MemoryDemo {
    public static void main(String[] args) {
        int i = 1;
        System.out.println("第一个i:" + i);
        int a = i;
        System.out.println("第二个i:" + i);
        System.out.println("第二个a:" + a);

        i = 2;
        System.out.println("第三个a:" + a);
        System.out.println("第三个i:" + i);

    }
}
输出结果:
第一个i:1
第二个i:1
第二个a:1
第三个a:1
第三个i:2

2.2 引用类型有两块存储空间(一块在stack中,一块在heap中)

  • 一个对象在内存中会请求一块空间来保存数据,访问对象的时候不会直接是访问对象在内存中的数据,而是通过引用去访问
  • 引用:也是一种数据类型,保存的是内存的地址,引用是存储在 stack栈空间里面
  • 不同的引用可以指向同一个对象,一个对象可以有多个引用
    代码示例:
package chapter3;

public class MemoryDemo {
    public static void main(String[] args) {
        String aa = "这是aa";
        String bb = "这是bb";
        System.out.println("第一个aa:" + aa);
        System.out.println("第一个bb:" + bb);

        bb = aa;
        System.out.println("第二个aa:" + aa);
        System.out.println("第二个bb:" + bb);

        aa = "重新赋值,查看结果";
        System.out.println("第三个aa:" + aa);
        System.out.println("第三个bb:" + bb);

    }
}

运行结果:
第一个aa:这是aa
第一个bb:这是bb
第二个aa:这是aa
第二个bb:这是aa
第三个aa:重新赋值,查看结果
第三个bb:这是aa

三:数组拷贝

代码示例

package chapter3;

import java.util.Arrays;

public class MemoryDemo {
    public static void main(String[] args) {
        int [] a = {1,2,3};
        int [] b = a;
        System.out.println("a的地址是:"+a);
        System.out.println("b的地址是:"+b);
        
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
        b[0] = 0;
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));

    }
}
输出结果:
a的地址是:[I@a09ee92
b的地址是:[I@a09ee92
[1, 2, 3]
[1, 2, 3]
[0, 2, 3]
[0, 2, 3]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容