String[] s = {\"a\",\"b\"};
以上代码是没有问题的。
那么来看一下以下代码
public class Test {
public static void main (String[] args) {
String[][] str = new String[4][];
// str[0] = {\"a\",\"b\"};
str[0] = new String[2];
str[0][0] = \"a\";
str[0][1] = \"b\";
}
}
类中注释掉的那句报错,只能用下面的那种语句进行附值,那么注释掉的那句跟上面的代码有何不同?为何会报错?
----------------解决方案--------------------------------------------------------
如果改成str[0]=new String[]{"a","b"};
就不会报错了.
因为数组是不可变的,除非你为它重新分配内存空间
一开始str就被声明为一个二维的数组,这时,只是把第一维声明为长度为4,而第二维却没有声明
这个时候要为第二维赋值就必须为它 new一个空间出来,而不能直接把数组的内容写入它里面
你这个试试,是可以通过的
String[] other={"a","b"};
str[0]=other;
----------------解决方案--------------------------------------------------------
如果你再对other或者str[0]赋值你就只能根据下标来赋了
不能再用大括号来赋了
other={"aa","bb"};
这样会报错,但是如果
other=new String[]{"aa","bbb"};
这样却不会报错,因为new字告诉编译器,要重新分一块内存给other数组用了
所以,它可以再定大小
----------------解决方案--------------------------------------------------------
原来这样的啊,我以为根据定义1维数组那样就可以了。。
但我String[][] str = new String[4][5];这样定义后,str[0] = {"a","b"};这样还是会报错呢……难道说这样的分配空间还是不行?
----------------解决方案--------------------------------------------------------
原来这样的啊,我以为根据定义1维数组那样就可以了。。
但我String[][] str = new String[4][5];这样定义后,str[0] = {"a","b"};这样还是会报错呢……难道说这样的分配空间还是不行?
这样当然还会报错,因为你已经给你的第二维数组定义为长度为5了,
向大括号的赋值方法只能用于刚刚申请空间的时候赋值
----------------解决方案--------------------------------------------------------
也就是说str[0] = {"a","b"};这个只能用在1维数组的附值上……
明白了……谢谢~
----------------解决方案--------------------------------------------------------
真的受教了
非常感谢二位
----------------解决方案--------------------------------------------------------
也就是说str[0] = {"a","b"};这个只能用在1维数组的附值上……
明白了……谢谢~
二维也能赋的
String[][] str={{"a","b"},{"ab","cd"}};
----------------解决方案--------------------------------------------------------