一、
今天写一道搜索题,很简单,但却碰到一个恶心的报错,NullPointerException。
看了半天代码,没啥错误啊,结果。。。
请各位大佬辨别以下两种定义静态数组方式:
static int[] a=new int [10];
static int[] b=new int [10];
和
static int [] a,b=new int [10];的区别。。
可能是Java基础学的太快忘记一些细节
还好今天突然想偷懒,就定义在了一起,结果报了错,还好及时改正了。。
在Java中,你提供的两段代码示例都涉及到静态数组的声明和初始化。但是,它们之间存在一些关键差异。
static int[] a = new int[10]; | |
static int[] b = new int[10]; |
在上面的代码中,你创建了两个静态整数数组 a
和 b
,每个数组都有10个整数元素。每个数组都被单独初始化。
static int [] a, b = new int [10]; |
在上面的代码中,你试图同时声明和初始化两个静态整数数组 a
和 b
。但是,这里存在一个问题:你只创建了一个长度为10的数组,并将其赋值给了 b
。因此,a
并没有被初始化,所以它仍然为 null
。尝试访问 a
或 b
的任何元素都可能导致 NullPointerException
。
总结:第一段代码是正确的,它创建了两个独立的静态整数数组。而第二段代码会导致错误,因为数组 a
没有被正确初始化。
二、
突然又想到上次遇到的一个问题
import java.util.Scanner; public class student{ static int n; public static void main(String args[]){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); ........ } }
乍一看,好像没什么问题,但是n定义了两遍,本来是想要定义一个成员变量n,结果在main函数中又重新定义了一个变量n,如果只在main方法中进行逻辑运算的时候,是不会有什么问题的,但当你要在外面弄一个成员方法调用的时候,然后你用了n,你以为你n中是有值的但是其实没有,然后你框框用然后还以为贼对,结果报了一个null的异常。。无语........
其实这个错误相当不好找,我写的这个其实是好找的,当时我写了近百行的代码,然后就死活找不出来。。。。