关于Java中数组赋值的有趣事实
先决条件: Java中的数组
在处理数组时,我们必须完成 3 个任务,即声明、创建、初始化或赋值。
数组声明:
int[] arr;
创建数组:
// Here we create an array of size 3
int[] arr = new int[3];
数组的初始化:
arr[0] = 1;
arr[1] = 2;
arr[3] = 3;
int intArray[]; // declaring array
intArray = new int[20]; // allocating memory to array
将元素分配给数组时的一些重要事实:
- 对于原始数据类型:对于原始类型数组,作为数组元素,我们可以提供可以隐式提升为声明类型数组的任何类型。除此之外,如果我们尝试使用任何其他数据类型,那么我们将收到编译时错误,说明可能会丢失精度。
// Java program to illustrate the concept of array // element assignments on int type array public class Test { public static void main(String[] args) { int[] arr = new int[3]; arr[0] = 1; arr[1] = 'a'; byte b = 10; arr[2] = b; System.out.println(arr[0] + arr[1] + arr[2]); } }
输出:
108
// Java program to illustrate the concept of array // element assignments on int type array public class Test { public static void main(String[] args) { int[] arr = new int[3]; // Assigning long value to int type. arr[0] = 10l; arr[1] = 'a'; byte b = 10; arr[2] = b; System.out.println(arr[0] + arr[1] + arr[2]); } }
输出:
possible loss of precision.
// Java program to illustrate the concept of array // element assignments on char type array public class Test { public static void main(String[] args) { char[][] arr = new char[2][2]; // Assigning long value to int type. arr[0][0] = 10l; arr[0][1] = 'a'; char b = 10; arr[1][0] = b; // Assigning double value to char type arr[1][1] = 10.6; } }
输出:
error: incompatible types: possible lossy conversion from long to char error: incompatible types: possible lossy conversion from double to char
- 对象类型数组:如果我们正在创建对象类型数组,那么该数组的元素可以是声明的类型对象,也可以是子类对象。
// Java program to illustrate the concept of array // element assignments on Number type array public class Test { public static void main(String[] args) { Number[] num = new Number[2]; num[0] = new Integer(10); num[1] = new Double(20.5); System.out.println(num[0]); System.out.println(num[1]); } }
输出:
10 20.5
// Java program to illustrate the concept of array // element assignments on Number type array public class Test { public static void main(String[] args) { Number[] num = new Number[3]; num[0] = new Integer(10); num[1] = new Double(20.5); // Here String is not the child class of Number class. num[2] = new String(“GFG”); } }
输出:
Compile-time error(incompatible types)
// Java program to illustrate the concept of array // element assignments on Number type array public class Test { public static void main(String[] args) { Number[][] arr = new Number[2][2]; arr[0][0] = 10l; // Assigning char to Number type array arr[0][1] = 'a'; byte b = 10; arr[1][0] = b; // Assigning String to Number type array arr[1][1] = "GEEKS"; } }
输出:
error: incompatible types: char cannot be converted to Number error: incompatible types: String cannot be converted to Number
- 接口类型数组:对于接口类型数组,我们可以指定元素作为它的实现类对象。
// Java program to illustrate the concept of array // element assignments on Interface type array public class Test { public static void main(String[] args) { Runnable[] run = new Runnable[2]; // Thread class implements Runnable interface. run[0] = new Thread(); run[1] = new Thread(); } }
// Java program to illustrate the concept of array // element assignments on Interface type array public class Test { public static void main(String[] args) { Runnable[] run = new Runnable[2]; run[0] = new Thread(); // String class does not implements Runnable interface. run[1] = new String(“GFG”); } }
输出:
Compile-time error(Incompatible types)
说明:在上面的程序中,我们给出了导致编译时错误的 String 类的元素。因为我们知道 String 没有实现 Runnable 接口。
参考: https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html