黑马程序员技术交流社区
标题:
长度为0的数组引用等于null吗?
[打印本页]
作者:
帅哥哥
时间:
2014-5-21 01:29
标题:
长度为0的数组引用等于null吗?
本帖最后由 帅哥哥 于 2014-5-21 11:09 编辑
晚上睡下就知道胡思乱想……
想着想着就被一问题搞得纠结了……
main函数的参数JVM默认会给一个长度wei零的字符串数组,那args等于null吗?何解~
引申:String[] s =""和String s=null是一样的嘛吗?
再引申:其它类型数组是一样的情况吗?
作者:
hamiguadjs
时间:
2014-5-21 08:20
args是主函数的参数:
关于主函数的参数就是虚拟机jvm传递的参数,引用数据类型只能有两个值,或者是是数组实体,或者是null。jvm在调用主函数时,传入的是new String[0]。String[] s =""和String s=null是不一样的,String s=null指的是该引用没有指向对象实体,而String[] s =""是长度为0的空字符串。所以args就是String[] s ="";而不是null。
作者:
李小新H
时间:
2014-5-21 08:22
好高端!
作者:
喜爱
时间:
2014-5-21 08:24
不一样的吧,可以从内存理解,数组长度为0,表示该数组的内存空间大小为0,而null内存还没有给其分配空间吧!
作者:
屈_zi
时间:
2014-5-21 09:33
String[] s =""是不合法的,不能这样写
String[]是数组对象
String是字符串对象
这是两种类,看起来一样,但是没法等同的
下面是String s = ""和String s = null的对比,结果写在语句后了
public class StringNull {
public static void main(String[] args) {
String s1 = "";
String s2 = null;
String s3 = new String();
System.out.println(s1.equals(""));//true
System.out.println(s1.equals(null));//false
System.out.println(s1.equals(s3));//true
//System.out.println(s2.equals(null));//空指针异常
}
}
复制代码
可见,""和null是不同的,null表示内存中还不存在这个对象;而""已经分配内存空间了,但还没有内容,与new String()的结果是相同的,即s1.equals(s3)是真的。
作者:
小熊星座
时间:
2014-5-21 09:41
null是一个空对象,不是一个字符串;“”表示一个对象实例,它的值是一个长度为0的字符串。
作者:
明镜菩提
时间:
2014-5-21 09:45
本帖最后由 明镜菩提 于 2014-5-21 09:46 编辑
这个肯定不是一样的。
string s=null;
不在内存中开辟空间
string s="";
在内存中开辟空间,但空间中没有值(""也是一个字符串)
NULL代表声明了一个空对象,根本就不是一个字符串。
""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。
作者:
帅哥哥
时间:
2014-5-21 11:46
屈_zi 发表于 2014-5-21 09:33
String[] s =""是不合法的,不能这样写
String[]是数组对象
String是字符串对象
我想我应该是明白了,
1.关于main的参数 args ,JVM默认给它的是一个长度为0的数组,虽然没有内容,但是有地址,这和给它null是不一样的,给null的话没有分配内存的,对不对
2. String s = "" 和 String s = new String() 是一样的,这和 String 这个封装类的具体内容有关系的,反正是建立对象了,堆里有地址是这对象的了,对不对
谢谢层主!!!
作者:
lvc
时间:
2014-5-21 18:21
学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2