群里有一个小伙伴发了一段和下面差不多的代码啊,问了一个问题,代码如下:
public static void main(String[] args) { doem01 doem01 = new doem01(); Integer name = doem01.name(); System.out.println(name); } public Integer name() { return null; }
这段代码毫无疑问,打出来的是null 群友问,为什么name中的return不报错啊,null不是string的默认值嘛然而我定义的是Integer 。这个是群友发的
这时我也不知道啊,就百度寻找答案,万能的度娘告诉我:
值类型 : 默认值为0;
引用类型 : 默认值为null;
下面的代码中,我们将Interger改成int类型:
public static void main(String[] args) { doem01 doem01 = new doem01(); int name = doem01.name(); System.out.println(name); } public Integer name() { return null; }
代码编译时不会报错,但运行的时候会报一个空指针的错误,为什么呢?因为Integer是int的封装类,编译器能够识别,但是它所调用的方法又是另一个,所以运行时
找不到那个方法所以报了一个空指针,代码如下:
public static void main(String[] args) { doem01 doem01 = new doem01(); int name = doem01.name(); Integer name1 = doem01.name1(); System.out.println(name); System.out.println(name1); } private int name() { // TODO Auto-generated method stub return 0; } public Integer name1() { return null; }
如代码int 声明的调用的是 int name()这个方法 Integer声明的调用的是Integer name1()这个方法。在声明变量初始化时也是相同的道理,int声明的变量只能为int类型
而Integer出来int类型外,还可以定义为null。如下:
Integer a1 = null; int a2 =null; //这行会报错
int a3 =1; int a4 = (Integer) null;
其他的基本数据类型也是如此。
个人学习,内容拙劣见谅