数组
数组属于引用数据类型(在堆中占用一块空间,传递的是一个引用,不是值),空间连续,会有什么问题?
int[] arr = new int[3](引用数据都需要new,去内存的堆中声明一块连续空间)
arr[0] = 1;arr[1]=2; (数组越界,ArrayIndexOutOfBoundException)
int[] arr1 ; 数组的声明
int[] arr2 = new int[]{1,2,3,4}
数组遍历
for(int i=0;i<arr.length;i++){ soutv(arr[i] } for(int num:arr){ soutv(num) }
1 int[][] arr1; 2 int[][] arr2 = new int[3][3]; 3 arr2[0][0] = 1; 4 arr2[0][1] = 2; 5 int[][] arr3 = {{1,2,3},{4,5,6},{7,8,9}} 6 还是定义三个空间,只不过每个空间里面还是数组。 7 for(int i=0;i<arr.length;i++){ 8 for(int j=0;j<arr[i].length;j++){ 9 soutv[i][j] 10 } 11 }
运行时数据区
方法在栈中执行,赋值是在堆中
成员变量:类的属性。作用域是类,类中的方法或者其他属性都可以使用。存放在堆中。
局部变量:只能作用于方法内。存放在栈中。
形参:值传递(基本数据类型)
引用传递(引用数据类型)
同样的方法,不同的入参。此时栈是否相同。相同。
public class Test { public static void updateNum(int num){ num = 20; } public static void updateNum(int[] num){ num[0]=100; num[1] = 200; } public static void main(String[] args) { int num = 10; updateNum(num); System.out.println("num = " + num);//num = 10 int[] nums = new int[]{1,2}; updateNum(nums); for (int s : nums) { System.out.println("s = " + s);//s = 100//s = 200 } } }