Integer 和类实现问题和重写++问题

public class countDemo {

    static Integer count;
     
    public static void main(String[] args) {
    
        for(int i = 0;i<6;i++){
            count++;
        }
        System.out.println(count);
    }
}

 这样为什么会报null指针异常呢,为什么不可以++呢

 

第二个问题:

   

public class User implements java.io.Serializable {
    private Integer userId;
    private String userName;
    private String password;
    private String mobile;
    private String email;
    
    @Override
    public String toString() {
        return "User [email=" + email + ", mobile=" + mobile + ", password="
                + password + ", userId=" + userId + ", userName=" + userName
                + "]";
    }
}

 为什么要在类上要实现implements java.io.Serializable 类?

public class User implements java.io.Serializable {

 

为什么要这样重写类里面的属性?

public String toString() {
        return "User [email=" + email + ", mobile=" + mobile + ", password="
                + password + ", userId=" + userId + ", userName=" + userName
                + "]";
    }

 

 

 

1、没有给count赋初值,Integer是int的封装类,默认值为null
应该这样赋值:
Integer count = 0;(这种写法在jdk1.5及以上的版本适用,原因是1.5以上的版本提供了自动拆箱机制;但如果你的jdk是1.4及以下,则应该改为:
Integer count = new Integer(0);)

2、一个类只有实现了Serializable接口,它的对象才是可序列化的。而实际上Serializable是一个空接口,没有具体的内容,它的目的只是简单的标识一个类的对象可以被序列化。

3、重写toString()方法是期望得到自己想要格式的字符串,这个方法是定义在Object类中的,参考源码:
[code="java"]public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}[/code]

第一个问题,Integer是int的封装类,它是引用类型,默认值为null,因此需要初始化之后才能进行++操作

第二个问题Serializable接口用于实现对象的序列化,你不实现这个借口也没问题
第三个问题覆盖toString方法是IDE默认并且通用的表示对象值的格式,没什么特殊含义,你可以自己定义任何格式,只要返回的是字符串就可以,你可以自己拼装对象显示值的字符串

第一个因为引用类型默认值是null,做++操作会先把integer拆箱,相当于调用intValue()方法,一个null对象调用方法肯定会空指针。
第二个实现接口是序列化,比如orm的时候需要实现。tostring是为了更清楚地表示一个对象的信息,在字符串连接时候直接用对象名就可以了,方便

都很清楚了,我也就不多说了,支持你一下吧