内存分配
多个数组指向同一块内存
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。
I'm so cute. Please give me a candy.
- 本文链接:https://m0re.top/posts/f8f6e3f5/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
您可以点击下方按钮切换对应评论系统,
Valineutterances