Java 编译器为何给出.NullPointerException错误

Java 编译器为何给出.NullPointerException错误,java,Java,每当我编译下面的代码时,它都会给出java.lang.NullPointerException错误。我已经查看了我的代码,但它似乎是正确的。它坏了还是我错过了什么 public byte[][] divi(byte[] pac, int pac_len){ int set = 0 ; byte [][] data = null; for( int i= 0 ; set != pac_len; i++) { if (set + 33

每当我编译下面的代码时,它都会给出java.lang.NullPointerException错误。我已经查看了我的代码,但它似乎是正确的。它坏了还是我错过了什么

 public byte[][] divi(byte[] pac, int pac_len){
      int set = 0 ;
      byte [][] data = null;

      for( int i= 0 ; set != pac_len; i++) { 
           if (set + 33 <= pac_len) {
                data[i] = new byte[33];
                System.arraycopy(pac, set, data[i], 0, 33);
           }
       }
  }

你当然错过了什么:作业

byte [][] data = null;
明确地为数据指定null。然后,对数据[i]进行赋值,这会导致NullPointerException

将上述行改写为

byte [][] data = new byte[][pac_len];
应该解决NPE问题

它不能解决无限循环的问题-您需要为此调整设置变量。当前,set不会更改,因此循环是无限的。看起来您的代码试图将一个长数组分成33字节的块。您需要特别注意pac_len不能被33整除的情况,因为循环条件要求设置为pac_len才能退出。

首先,NPE是一个运行时异常,您在编译时不会得到它

第二,将null赋值给数据,然后尝试访问它。这当然是NPE

第三,在解决了上面提到的两个问题之后,应该修复循环:for int i=0;设定!=帕库伦;我++


在这个循环中,您的状态不好。我可能超过数组边界,这可能会导致ArrayOutOfBoundException,您应该确保我从未超过数组的长度您的循环是无限的。

NullPointerException是一个运行时异常,您在编译期间无法获得它。是否存在compiletime异常?如果您说的是真的,您发现了一个极其罕见的编译器错误。您应该在Java Bug巡游中报告它。很可能你只是误用了术语。将堆栈跟踪编辑到您的问题中会以某种方式解决这个问题。