1、下面哪些语句能够正确地生成5个空字符串?
A String a[]=new String[5]; for(int i=0;i<5;a[++]="");
B String a[]={"","","","",""};
C String a[5];
D String[5]a;
E String []a=new String[5]; for( int i=0;i<5;a[i++]=null);
原答案是AB,但是其他的就不行?
为什么E可以编译并运行得到5个空字符串?
非常感谢各位帮忙。
答案都不错,但只能给一个朋友加分。实在抱歉。
看样子你刚刚入门,那么我们就先说简单的。
1.Java规定,定义一个数组只能采取以下方式:
Object o[] = new Object[x];
或者 Object o[] = {o1,o2,...,ox};
所以C和D语法错误。
2.Java中有字符串为空和空字符串两种说法。例如:
String s;//定义了一个字符串,该对象为空
s = "";//将一个空字符串赋给刚刚定义的字符串
3.s = null称为“将字符串置为空”,s=""称为“将一个空字符串赋给s。
所以E不合题意。
如果有兴趣,继续向下看。
Java虽然声称去掉了C/C++令人厌恶的指针,但是我个人认为事实上Java处处充满了指针。我们定义任何非基本数据类型时,都是定义了一个指针(尽管在Java中官方称呼是“引用”)。例如:
String s;
事实上就是定义了一个指针,Java虚拟机为它在栈中分配一个空间,其实是一个固定长度的地址,如果没有初始化,它的值将是一个特殊的指向null的地址。当我们用这样的语句赋值时:
s = "a";
Java虚拟机将在堆中新开辟一个空间,里面存放“a”这个值以及相关所需信息,同时将存放在栈中的s的值修改为这个新开辟空间的入口地址。当使用这样的语句:
String s2 = s;
Java虚拟机将在栈中分配一个空间(同样是固定长度的地址),同时将s的值复制到这个新的空间。
如果你能够理解上面的文字,那么像这类问题你就会认为是很自然的事情了。
1.Java规定,定义一个数组只能采取以下方式:
Object o[] = new Object[x];
或者 Object o[] = {o1,o2,...,ox};
所以C和D语法错误。
2.Java中有字符串为空和空字符串两种说法。例如:
String s;//定义了一个字符串,该对象为空
s = "";//将一个空字符串赋给刚刚定义的字符串
3.s = null称为“将字符串置为空”,s=""称为“将一个空字符串赋给s。
所以E不合题意。
如果有兴趣,继续向下看。
Java虽然声称去掉了C/C++令人厌恶的指针,但是我个人认为事实上Java处处充满了指针。我们定义任何非基本数据类型时,都是定义了一个指针(尽管在Java中官方称呼是“引用”)。例如:
String s;
事实上就是定义了一个指针,Java虚拟机为它在栈中分配一个空间,其实是一个固定长度的地址,如果没有初始化,它的值将是一个特殊的指向null的地址。当我们用这样的语句赋值时:
s = "a";
Java虚拟机将在堆中新开辟一个空间,里面存放“a”这个值以及相关所需信息,同时将存放在栈中的s的值修改为这个新开辟空间的入口地址。当使用这样的语句:
String s2 = s;
Java虚拟机将在栈中分配一个空间(同样是固定长度的地址),同时将s的值复制到这个新的空间。
如果你能够理解上面的文字,那么像这类问题你就会认为是很自然的事情了。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2006-09-28
AB是等价的。CD根本就是错误的,没有这样定义数组的。
E是可以编译,但是请看清题目,题目要求的是空字符串,E里面的数据不是空字符串,是空值null; 空字符串不等于空值。
E是可以编译,但是请看清题目,题目要求的是空字符串,E里面的数据不是空字符串,是空值null; 空字符串不等于空值。
第2个回答 2006-09-28
B是对的.A不知道是楼主笔误还是原题如此,for里面的a[++]=""差个i,应该是a[i++]="",C、D肯定是错的。E语法没有错误,但不合题意。
第3个回答 2006-09-28
A