JavaSE | 01-基本语法

数组

索引

int[] arr = {0, 1, 2, 3, 4};
System.out.println(arr);//[I@f6f4d33

地址符:

[ :表示当前是一个数组
I :表示当前数组里边的元素类型为int
@ :表示一个间隔符号
6f4d33 :16进制的数组 ‘地址值’

int len = arr.length; //获取数组长度
int[] arr = new int [3]; //格式:数据类型[] = new 数据类型[数组长度]

数组默认动态初始化值:

整数类型: 0;
浮点数类型: 0.0;
字符类型: ‘/u000’ (空格)
布尔类型: false
引用数据类型: none


Java内存分配

栈:方法运行时使用的内存,比如main方法运行,进入方法栈中运行。
堆:存储对象或数组,new来创建的,都存储在堆内存
方法区:存储可以运行的class文件
本地方法栈: JVM在使用操作系统的时候使用,和开发无关
寄存器:给CPU使用,和开发无关

  • 当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次询问的时候都是修改后的结果了。例如:
public static void main(String[] args){
	int[] arr1 = {11.22};
	int[] arr2 = arr1;//此时arr2与arr1共用一个内存
	sout(arr1[0]); //11
	sout(arr2[0]); //11
	
	arr2[0] = 33;
 
	sout(arr1[0]); //33
	sout(arr2[0]); //33
}

方法

方法是程序运行的最小执行单元(类似于c中的函数)

经典例题: 需求:定义一个方法copyOfRange(int[] arr, int from ,int to)
功能:将数组arr从索引from(包含)开始,到索引to(不包含)的元素复制带一个新的数组中,将新数组返回

package test;
import java.util.Arrays;
import java.util.Scanner;

public class method_test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = {1,2,3,4,5};
        int[] num = copyOfRange(arr,0,4);
        //打印新数组num的元素
        System.out.println(Arrays.toString(num));
    }
    
    public static int[] copyOfRange(int[] arr, int from, int to){
        //设置数组长度为 from - to
        int[] num = new int [to - from];
        for (int i = from; i < to; i++){
            num[i-from] = arr[i];
        }
        return num;
    }
}
  • 传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
public class method_test {
    public static void main(String[] args) {
        int num = 100;
        System.out.println("调用change方法前" + num); //100
        change(num);
        System.out.println("调用change方法后" + num); //100
    }
        public static void change(int num){
            num = 200;
        }
}

上述代码并未改变number的值,因为方法change()与方法main()存储在栈内存中,两个num并不一样.

  • 传递引用数据类型时,传递的是地址,形参的该百年,影响实际参数的值
public class method_test {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前" + arr[0]); //10;
        change(arr);
        System.out.println("调用change方法后" + arr[0]); //1000;
    }
    public static void change(int[] arr){
        arr[0] = 1000;
    }
}

上述代码中 arr 数组的值发生了改变,原因是数组属于引用数据类型,其引用(内存地址)存储在栈内存中,而实际数据存储在堆内存中。main 方法与 change 方法共享同一个数组引用(即指向堆内存中同一个数组对象),因此在 change 方法中对数组内容的修改会影响到 main 方法中访问该数组时的结果

今日访问 ... 次 | 今日访客 ... 人 | 本页阅读 ...
小站已萌萌哒运行了 0 0 0
已累计耕耘 16 篇博文 · 共 42.69k 个字
总访问量 ...