疯狂java讲义04
(出处:根据李刚老师《疯狂java讲义》视频中的知识点于此记录下来)
32, 基本变量和引用变量
深入了解数组:
数组是引用类型,引用类型和基本类型的区别在哪里?
【java程序,必须要使用java虚拟机Vitual Machine JVM 才能运行】
Java程序的内存可分为:
–堆(heap)内存:Java虚拟器启启动时分配的一块永久的、很大的内存区。
堆内存只有一块
–栈(stack)内存:每次方法运行分配一块临时、很小的内存区。
每个方法都有自己对应的栈区,方法结束时,对应的栈区就会被回收。
–在方法中定义的、局部变量(不管是什么类型),都放入对应的方法栈区。
–new出来的东西,都放在堆内存。
堆内存中对象,如果没有引用变量指向它,那它就变成了垃圾,等待VM的垃圾回收器来回收它。
计算机的每个内存单元 (Byte、字节)在操作系统都有一个编号,就像是一栋大楼要为每个房间编号一样。
【变量赋值的区别:】
–基本类型的赋值:直接将该值存入变量所在的内存
–引用类型的赋值: 将该对象所在第一个内存单元的编号(内存地址)存入变量。
没有二维数组
其实只有一维数组,二维数组是假象
二维数组的本质,是数组元素为一维数组的数组
=================================
public class a {
//内存中的数组
public static void main(String[] args) {
//基本类型的赋值
int it = 20;//4个字节
//iArr在栈内存,new出来的数组对象在堆内存
int[] iArr = new int[4];//数组占16个字节
System.out.println(iArr.length);//4
//再次对引用变量赋值,让iArr重新指向一个新的数组
iArr = new int[]{20,10};
System.out.println(iArr.length);//2
}
}
===========================
public class 基本类型和引用类型 {
public static void main(String[] args) {
//基本类型
int a = 20;
int b = a;//基本类型赋值:直接将值存入变量所在的内存
System.out.println("a:" + a);//20
System.out.println("b:" + b);//20
b=13;//将13存入b所在的内存
System.out.println("a:" + a);//20
System.out.println("b:" + b);//13
//引用类型
int[] arr = new int[]{20};//引用类型赋值:将对象所在内存第一个内存单元的编号存入引用变量。
int[] brr = arr;//引用类型赋值:只是存入首地址。
System.out.println("arr[0]:" + arr[0]);//20
System.out.println("brr[0]:" + brr[0]);//20
brr[0] = 13;
System.out.println("arr[0]: " + arr[0]);//13
System.out.println("brr[0]: " + brr[0]);//13
}
}
=============================
二维数组
其实只有一维数组,二维数组是假象。
(int[] => 一维数组)
(int[][] => 二维数组)
public class 二维数组 {
public static void main(String[] args) {
// 动态: 元素是int[]类型(引用类型),动态初始化为null
int[][] arr = new int[5][];
System.out.println(arr.length);
for ( int i = 0;i<arr.length; i++)
{
System.out.println(arr[i]);
}
//foreach遍历
for (int[] it : arr)
{
System.out.println(it);
}
//对数组元素赋值
//arr[0] 是数组元素,是int[]类型,20是int
arr[0] = new int[]{4,5};//静态
arr[1] = new int[4];//动态
}
}
===================
public class 二维数组简化初始化 {
public static void main(String[] args) {
// 创建一个长度为4的数组,其中每个元素都是动态初始化的长度为5的数组
int[][] arr = new int[4][5];
System.out.println(arr.length);
//相当于:
int[][] brr = new int[][]{
new int[5],
new int[5],
new int[5],
new int[5],
};
System.out.println(brr.length);
}
}