Java的内存中方法区、栈和堆的区别

Java的内存

1. Java内存的三部分

  • 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈中。

    • 局部变量:方法的参数或者方法内部的变量。
    • 作用域:一旦超出作用域,立刻从栈内存中消失。
  • 堆(Heap):凡是new出来的东西都在堆中。

    • 堆内存中的东西只有一个地址值:16进制
    • 堆内存中的数据都有默认值。
      • 创建数组时如果数组为整形那么他的默认值为:0;
      • 创建数组时如果数组为字符串那么他的默认值为:null;
      • 创建数组时如果数组为字符型那么他的默认值为:'\n0000'
      • 创建数组时如果数组为浮点型那么他的默认值为:false;
  • 方发区:方法存储位置,方发区要运行要进栈。

2. Java的方法使用过程

Java的内存中方法区、栈和堆的区别_第1张图片

3. Java中数组相互影响

public static void main(String[] args){
    int[] arr1 = {1,2,3,4,5,6};
    int[] arr2 = arr1;
    System.out.println(arr1[1]);
    arr2[1] = 40;
    System.out.println(arr1[1]);
}
//打印结果为
//2和40

从打印结果可以看出来int[] arr2 = arr1;试讲arr1的地址复制过来了,所以arr2的指向的就是arr1,所以更改arr2的值就是在更改arr1的值。

4. Java数组越界问题

  • 数组索引越界异常

  • 空指针异常

你可能感兴趣的:(学习Java)