int[][] arr=new int[3][];
System.out.println(arr[0]);// 1
char[][] array=new char[3][];
System.out.println(array[0]);// 2
在1打印的是null我知道,因为arr[0]的默认值是null
但在2打印为啥就是NullPointerException?为什么不是null?
你发现了一个编写java源码的人的一个bug(实际arr[0]对象也为空指针)
查看源码,证明这是一个bug:
直接在ecliplse 中右键点击……ut.println(arr[0]);//…… ,选择“open declaration”
然后你可以查看源码中的类方法调用关系:
调用的是print(Object obj)
调用的是print(char a[])
在然后你得到实际输出内容的就是String.valueOf(arr[0])
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
我们可以看到即使你传递过来是一个空指针,实际输出的只是小写的null
该bug描述:在PrintStream
实例中,缺少print(int a[])的方法,只有print(char a[]) 和print(object a[])
java 数组 int和char的区别
int[][] int1=new int[3][2];int1[i]引用第i个字数组,也就是二维表中的第i行。它本身也是一个数组,int1[i][i]引用这个数组的第j项。对于 int[][] int1=new int[3][];new语句执行后,int1被在栈中分配了空间,引用一个三维数组;三维 数组也被分配了空间(在堆中),三位数组...
java高手:java定义二维数组问题
int a[][] = new int[3][2]; 表示定义一个三行二列的二维数组,但是a[0] = {1,6}; 是对一维数组进行赋值,而a是二维数组无法使用一维数组的赋值方法,所以程序会报错。该代码的正确方法应该是:int a[][] = new int[3][2];a[0][0]=1;a[0][1]=6;...
java关于二维数组的问题。
首先这个二维数组可以看成是一个标准的 3X3 的矩阵 第一个循环 :for(int i = 0;i<arr.length;i++){ for(int j=0;j<arr.length;j++){ System.out.print(arr[i][j]);} System.out.println();} 第一轮大循环:i 取值为0时,j取值0,1,2,则打印:arr[0][0],arr[0][1],a...
关于java中二维数组输出的问题
int[][] arr={new int [1] {1},new int [2] {2,3},new int [3] {4,5,6}};则二维数组arr.length等于3,表示它由3个一维数组组成,即3行。arr[0].length表示第1个一维数组的长度1,即1列。arr[1].length表示第2个一维数组的长度2,即2列。arr[2].length表示第3个一维数组的长...
怎样用java输入一个char型的二维数组
以下是文字版的代码:import java.util.Scanner;public class Test{ public static void main(String []args) { Scanner in=new Scanner(System.in);System.out.print("请输入数组c第一维的元素个数:");int n=in.nextInt();char[][] c=new char[n][];int[] m=new int[n];int i,k;...
java的二维数组问题
以下是定义的加法函数(使用try捕获异常这么简单)public static int[][] add(int[][]a,int[][]b){try{int sum = 0;int[][]c=new int[a.length][a.length ];for(int i=0;i<c.length;i++) { for(int j=0;j<c.length;j++) { c[i][j]=a[i][j]+b[i][j];...
java 二维数组问题
int arr[][] = new int[][] { { 4, 5 }, { 6, 7 } };System.out.println("二维数组中的各个元素是");for (int x[] : arr) { for (int i=0;i<x.length;i++) {\/\/这里for (int i : x) 改成for (int i=0;i<x.length;i++)if (i == x.length-1) { \/\/...
Java二维数组问题
你的这段写法里面有下面的问题:1、数组的定义:Object [][] arr = new Object[4][];数组长度必须明确,方可使用,如:Object[][] arr = new Object[4][4];。2、赋值:arr[0][0] = new String[0]["字符串张三"];数组的方括号中的是数组下标,不是值,如:arr[0][0] = new ...
java中二维数组的初始化问题
int[][] a=new int[2][3];后面那两个中括号必须都有值,如果是变量,这个变量必须已经赋值。
java关于二维数组分配空间
如果写成这样:int s [][]={{1,2},{3,4,5},{6,7,8,9}};那它就是一个3行X列的数组,X表示2、3、4,也就是说第1行有两个元素,第2行3个,第3行4个,不是规则的3行4列的了。关于这两种方式输出结果,你第一种分析的正确。第二种形式,根据我上面说的,下面这四个输出你应该...