84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
User user;和User user = null;这两种写法有什么区别呢?
认证高级PHP讲师
这需要看 User user;出现在哪里,先放结论:
User user;
如果是对象的属性(field),则两种写法没有区别。
如果是方法中的局部变量,若方法中没有其他地方对user赋值,则编译错误。
如果是对象的属性,那么在编译的时候,java编译器会自动为field赋初值(原始类型为默认值;引用类型为null)。例如下面的代码:
public class TestInitialization { private User userA; }
编译后,使用javap查看字节码,红色部分为编译器自动赋初值的过程:
如果是方法中的局部变量,编译器不会自动赋初值。User user;只是定义的变量user,但并未给user在内存中分配空间,没有初始化,无法通过编译;User user = null;不仅定义了变量user,并且还为user分配了内存空间,user现在指向null。
User user = null;
那么问题来了`null`又是个什么鬼? http://stackoverflow.com/questions/2707322/what-is-null-in-java
如果user是局部变量: 在第一次赋值 (包括初始化为null) 之前使用user是编译错误
赋值后没区别
好像是一样的
没有区别 , 默认的初始化值为null
没有= 在栈里面没有给他开辟空间。 加上=null 就在栈里面给他指定了一个空的占位符
这需要看
User user;
出现在哪里,先放结论:如果是对象的属性(field),则两种写法没有区别。
如果是方法中的局部变量,若方法中没有其他地方对user赋值,则编译错误。
如果是对象的属性,那么在编译的时候,java编译器会自动为field赋初值(原始类型为默认值;引用类型为null)。例如下面的代码:
编译后,使用javap查看字节码,红色部分为编译器自动赋初值的过程:
如果是方法中的局部变量,编译器不会自动赋初值。
User user;
只是定义的变量user,但并未给user在内存中分配空间,没有初始化,无法通过编译;User user = null;
不仅定义了变量user,并且还为user分配了内存空间,user现在指向null。如果user是局部变量: 在第一次赋值 (包括初始化为null) 之前使用user是编译错误
赋值后没区别
好像是一样的
没有区别 , 默认的初始化值为null
没有= 在栈里面没有给他开辟空间。 加上=null 就在栈里面给他指定了一个空的占位符