赋值为0或null,和不赋值的区别
发布时间:2020-12-15 07:29:13 所属栏目:Java 来源:网络整理
导读:目录 赋值为0或null,和不赋值的区别 第一部分 第二部分 成员变量要是对象类型 静态变量是在什么时候赋值的 赋值为0或null,和不赋值的区别 第一部分 如果在方法中声明变量,声明时不赋值和给个null是不一样的,赋值null也相当于完成了初始化赋值,这个时候
目录
赋值为0或null,和不赋值的区别第一部分如果在方法中声明变量,声明时不赋值和给个null是不一样的,赋值null也相当于完成了初始化赋值,这个时候可以通过编译也可以可以调用对象方法,但必然会报空指针异常。但Java中成员变量不需要赋予初始值,但一般会有一个默认初值,基本类型如int初值为0,除基本类型变量外,其他对象的初始值都是null. 1. 像这种String str = xxx; 不管xxx是null还是其他字符串,str这个东西都是在栈里有块空间,=null的时候,里面栈存的是null,非null的时候栈存的是实际字符串的地址(堆中或者常量池中)。 2. 而String str; 这种情况,jvm同样也为其分配了一块空间,但是不知道值是多少,java语法要求引用之前必须初始化,所以你直接这么写,str根本不能引用。 第二部分
首先要明白,java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。 比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list里面。String str = new String("Test"),是开辟内存放入了对象,并把它的引用赋给str。 同理,BookInfo bookinfo=null与BookInfo bookinfo=new BookInfo():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。 成员变量要是对象类型因为对象类型可以为null;而null和0的意义又不一样,所以null对查询没有影响。 静态变量是在什么时候赋值的在类被加载到jvm的时候被创建,类是什么时候被加载到jvm?是在.java---.class---.jar---一次性全加载入jvm的。这时候创建静态成员,普通成员实例化的时候才创建。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |