java new对象 User user; 和 User user = null; 有什么区别
PHP中文网
PHP中文网 2017-04-18 10:32:27
[Java讨论组]

User user;

User user = null;
这两种写法有什么区别呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
PHP中文网

这需要看 User user;出现在哪里,先放结论:

  1. 如果是对象的属性(field),则两种写法没有区别。

  2. 如果是方法中的局部变量,若方法中没有其他地方对user赋值,则编译错误。

如果是对象的属性,那么在编译的时候,java编译器会自动为field赋初值(原始类型为默认值;引用类型为null)。例如下面的代码:

public class TestInitialization {
    private User userA;
}

编译后,使用javap查看字节码,红色部分为编译器自动赋初值的过程:

如果是方法中的局部变量,编译器不会自动赋初值。User user;只是定义的变量user,但并未给user在内存中分配空间,没有初始化,无法通过编译;User user = null;不仅定义了变量user,并且还为user分配了内存空间,user现在指向null。

那么问题来了`null`又是个什么鬼?
http://stackoverflow.com/questions/2707322/what-is-null-in-java
阿神

如果user是局部变量: 在第一次赋值 (包括初始化为null) 之前使用user是编译错误

赋值后没区别

PHPz

好像是一样的

PHP中文网

没有区别 , 默认的初始化值为null

PHPz

没有= 在栈里面没有给他开辟空间。 加上=null 就在栈里面给他指定了一个空的占位符

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号