📜  关于Java中数组赋值的有趣事实

📅  最后修改于: 2022-05-13 01:55:03.956000             🧑  作者: Mango

关于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

将元素分配给数组时的一些重要事实:

  1. 对于原始数据类型:对于原始类型数组,作为数组元素,我们可以提供可以隐式提升为声明类型数组的任何类型。除此之外,如果我们尝试使用任何其他数据类型,那么我们将收到编译时错误,说明可能会丢失精度。
    // 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
    
  2. 对象类型数组:如果我们正在创建对象类型数组,那么该数组的元素可以是声明的类型对象,也可以是子类对象。
    // 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
    
  3. 接口类型数组:对于接口类型数组,我们可以指定元素作为它的实现类对象。
    // 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