内存分配

多个数组指向同一块内存

package com.game;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,world!");
        //定义第一个数组
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //定义第二个数组
        int[] arr2 = arr;
        arr2[0] = 111;
        arr2[1] = 222;
        arr2[2] = 333;
        //输出两个数组的元素及名称
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr2);
        System.out.println(arr2[0]);
        
    }
}


看结果是可以看到arr2=arr的,也就是说,两个数组指向了同一块内存。

数组初始化

静态初始化

package com.game;

public class HelloWorld {
    public static void main(String[] args) {
        /*
        * 静态初始化
        *   格式1
        *       数据类型[] 变量名 = new 数据类型[]{数据1, 数据2, 数据3,......};
        *   格式2(简单格式)
        *       数据类型[] 变量名 = {数据1, 数据2, 数据3,......};
        * */
        //两种格式
        int[] arr = {1, 2, 3};
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //分割线
        int[] arr1 = new int[]{4, 5, 6};
    }
}

索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题。
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常。null:空值,引用数据类型的默认值,表示不指向任何有效对象。

package com.game;

public class HelloWorld {
    public static void main(String[] args) {
        //索引越界
        //ArrayIndexOutOfBoundsException
        int[] arr = new int[3];
        System.out.println(arr[3]);
        //空指针异常
        // 把null赋值给数组
        //NullPointerException
        arr = null;
        System.out.println(arr[0]);
    }
}

字符类型

字符类型可以表示为单个字符,表示为char,char是两个字节,可以存放汉字,多个字符就用String来表示了。

char c1 = 'a';
char c2 = '\t';
char c3 = '字'
char c4 = 97;

字符类型可以直接存放一个数字。
字符型本质:字符型存储到计算机中,需要将字符对应的码值(整数)找出来,比如:’a’
存储:’a’ ==> 码值97 ==> 二进制 ==> 存储
读取:二进制 ==> 97 ==> ‘a’ ==> 显示

算数运算符

int i=1;
i = i++;
System.out.println(i); //1

这么理解:使用临时变量

tmep=i;i=i+1;i=temp;

int i=1;
i = ++i;
System.out.println(i); //2

先加再赋值。

i=i+1;tmep=i;i=temp;

三元运算符

语法:
条件表达式?表达式1:表达式2
运算规则:如果条件表达式为true,则执行表达式1;如果条件表达式为false,则执行表达式2。

int a = 10;
int b = 99;
int result = a>b ? a++ : b++;

其中在涉及转换时,表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换的)

package com.game;

public class HelloWorld {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int c = a>b ? a : b;
        //int d = a>b ? 1.1 : 3.4; //不兼容的类型: 从double转换到int可能会有损失
        int e = a>b ? (int)1.1 : (int)3.4; //满足int --> double
        }
    }

三元运算符可以转成if–else语句

数组拷贝

package com.game;

public class HelloWorld {
    public static void main(String[] args) {
        int[] arr1 = {10,20,30};
        int[] arr2 = new int[arr1.length];
        //遍历arr1,把每个元素拷贝到arr2对应的元素位置
        for (int i = 0; i<arr1.length; i++) {
            arr2[i] = arr1[i];
        }
        //修改arr2的一个元素
        arr2[0] = 100;
        //分别输出arr1和arr2
        System.out.println("====arr1的元素====");
        for (int i = 0; i < arr1.length; i++){
            System.out.println(arr1[i]);
        }

        System.out.println("====arr2的元素====");
        for (int i = 0; i < arr2.length; i++){
            System.out.println(arr2[i]);
        }
    }
}

流程为:先开辟一个新的数组空间,然后将数组1中的数据进行遍历,然后赋值给数组2。