2 qq 37078792 qq_37078792 于 2017.01.08 17:21 提问

【java】声明变量赋值为null和不赋值有没有区别

比如下面这段代码:
public class A {
A a;
}

public class A {
A a = null;
}
这两种写法有没有区别

4个回答

u010528826
u010528826   2017.01.08 17:58

成员变量的话要看有没有用final修饰。

如果没有被final成员变量不需要显式的赋值,因为它会有一个初始化的过程,初始化会赋为默认值。
就像你上面代码中的那样,并没有什么区别。

如果被final修饰,(即常量)则必须声明时就进行赋值,否则编译报错。因为常量是不能被修改的,所以这一点应该很好理解。

如果是局部变量则必须显式的赋值,否则编译报错,因为它没有初始化的过程。
这里是必须显式的赋值,不是声明时就进行赋值,注意和常量的区别。

u010528826
u010528826 回复??333: 要是能帮到你,麻烦采纳一下。谢谢
一年多之前 回复
qq_37078792
qq_37078792 明白了,谢谢
一年多之前 回复
liu270335264
liu270335264 不错,不错!有final与无final,成员变量与局部变量!
一年多之前 回复
baidu_36779925
baidu_36779925   2017.01.08 17:33

在全局变量没啥区别,局部变量有问题。

Ro_bot
Ro_bot   2017.01.08 18:08

你应该去了解下 java 的类初始化过程。
初始化过程中,JVM 会默认将成员变量赋值,
引用类型为 null
即 a 赋值为 null

u012976158
u012976158   2017.01.09 10:57

如果是定义引用数据类型的变量 , 那么会自动初始化为null

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中,只声明一个对象不赋值,与声明一个对象并赋为null,有啥区别?
转自:http://www.oschina.net/question/557858_127408 比如: public MainGame   mMainGame ; 与 public MainGame   mMainGame = null;这两句的区别? 编译的时候会不同,未赋值,直接使用编译时会报错。 不赋值就不会分配空间,赋值null会分配0大小的初始空间.
对“不使用的对象手动赋值为null”的理解
曾经的曾经,确实看到和听到过这句话,但是实际开发中,代码中还真没有碰到过。但是今天看《深入理解JVM虚拟机》一书中,正好看到,有必要么?还是很有必要的,根据书上面的,上下代码,和书本上面的几乎一样,后面多了一个无用的测试。
对象赋值为null时 内存分配情况,以及什么时候使用效率高
==
Java中字符串定义,初始化,赋值为null的区别
1、概述:字符串定义 只定义不分配内存空间,不做任何操作;字符串初始化 两种方式直接等号赋值,用new初始化,直接等号赋值放入内存池,其它变量也可以引用;new初始化分配内存空间,不可引用;字符串赋值为null 初始化了,并且有了引用,但是没有指向任何内存空间;2、详解:String s;和String s=null;和String s="a";有什么区别?第一个只是定义了一个String类型变量...
是否有必要显式的在方法体内将局部变量赋值为null
上周听了淘宝网技术专家蒋江伟的一个分享《淘宝前台系统优化实践-吞吐量优化》   , 对其中“编写GC友好的代码”一节颇有兴趣,并存在疑问,回去后反复试验,从网上找资料,在蒋江伟的帮助下,算是得出了自己的结论。       首先,根据分享内容,结合 PPT 摘录了一些基础的东西, FULL GC 就是对 old 区的一次垃圾回收 . 应用监控中比较关心的。 650) this.wid
(转)Java变量初始化赋值null
原地址:http://www.cnblogs.com/znsongshu/p/6282672.html 在Java中,null值表示引用不指向任何对象。运行过程中系统发现使用了这样一个引用时·可以立即停止进一步的访问,不会给系统带来任何危险。 1.如果是对象的field的话那么系统在初始化对象的时候会把那些对象的值赋值为null,基本数据类型也有它们的初始值 2.如果是在方法
Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括: 1)用来保存基本数据类型的值; 2)保存类的实例,即堆区对象的引用(指针) 3)也可以用来
java String赋值问题,nul,new String()函数赋值问题
今天写代码的时候用String赋值碰到的问题,特地记录下,方便自己也方便大家。         新建一个String的时候,有三种方法: new String()、 null、“” , 以下分别对这几种方法进行测试  1. 使用null赋值的时候,不能使用String的length方法,同时也不等于空字符“”,如下所示: 2. 使用new String()赋值的时候,不等于n
Java 定义变量"空"与"NULL"
String s; System.out.println(s); 在Eclipse里面就会报错,是因为你没有初始化s. String s = null; System.out.println(s); 这样就不会报错. 空变量是没有值的,NULL是有值的.在对"对象或变量"的调用前进行一个初始化是符合JAVA编程规范的,它是一个良好的编程习惯.
java中当给一个对象赋值为null时发生了什么
比如下面的代码String[] arr = new String[10]; arr=null;将arr这个引用置空,不指向任何对象。 上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以回收此对象。java中对象引用放在栈中,对象的实例放于堆中,一个对象要是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向。 而null对象在堆中会被java的垃圾回收机制回收。关于n