String[] aaa; 和 String aaa[]; 他们的区别在那里? String[] aaa; 和 String aaa[]; 他们的区别在那里? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有区别,Java支持两种不同的写法。但是建议使用第一种。 我看thinking in java 也说是没有区别,只是前一种写法,更合情理! 可是我似乎记得以前在什么地方看到过,说他们是有区别的,可能是我记错了吧!明天揭贴! 没区别, 第一种可读性更好, 明确表示了aaa是一个String数组. 由于数组是引用类型....,所以String[]aaa=new String[value];//value 是String内存空间的个数.所以,aaa类似c语言的指针..... thinking in java 中的意思是这样的:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。对于,编程人员来说,两种写法是没有区别的。----------------------------------那么,它们在内部的实现机制上,比如,内存地址的分配上,有什么区别吗? JAVA虚拟机上面的还是真实的内存里面的........ 这两种方式,其实都是定义了一个 reference 有没有这个的区别,:比如说,他们已经进行了初始化,那么:String[] aaa;//指的是第一个元素的头地址String aaa[];//其中的每一个,指向所包含元素的地址。有这样的区别吗? String[] aaa; String aaa[]; 只是写法上的区别,但理解上有点不同:String[] aaa这样写是把数组也当成对象来表示了(注意数组本来就是对象,但是通过String[] 更加突出其对象特性)su 不应该是aaa指向第一个元素的头地址(实际上就是数组的引用),而每一个元素aaa[index]指向每一个String的对象.....(两种表示在这一点没有区别...) 刚才做了一个测试:写了一个Test.java类:如下:public class Test { public Test() { } public static void main(String[] args){ String[] str1 = { "aaa" , "bbb" , "ccc" } ; String str2[] = { "aaa" , "bbb" , "ccc" } ; System.out.println("------------------------------------"); System.out.println("str1.hashCode() : " + str1.hashCode()); System.out.println("str2.hashCode() : " + str2.hashCode()); System.out.println("------------------------------------"); System.out.println("str1.clone() : " + str1.clone()); System.out.println("str2.clone() : " + str2.clone()); System.out.println("------------------------------------"); System.out.println("str1.getClass() : " + str1.getClass()); System.out.println("str2.getClass() : " + str2.getClass()); System.out.println("------------------------------------"); System.out.println("str1.toString() : " + str1.toString()); System.out.println("str2.toString() : " + str2.toString()); }}这个时候,str1 和 str2 指向的是不同的:运行结果如下:------------------------------------str1.hashCode() : 24561483str2.hashCode() : 18237215------------------------------------str1.clone() : [Ljava.lang.String;@1975b59str2.clone() : [Ljava.lang.String;@1ee3914------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@176c74bstr2.toString() : [Ljava.lang.String;@116471f这个时候,hashCode() ,clone() ,toString() 的值都不同,这个我能理解!**************************************************************************可是,当我把程序做了如下的修改:public class Test { public Test() { } public static void main(String[] args){ String[] str1 = { "aaa" , "bbb" , "ccc" } ; String str2[] = str1 ; System.out.println("------------------------------------"); System.out.println("str1.hashCode() : " + str1.hashCode()); System.out.println("str2.hashCode() : " + str2.hashCode()); System.out.println("------------------------------------"); System.out.println("str1.clone() : " + str1.clone()); System.out.println("str2.clone() : " + str2.clone()); System.out.println("------------------------------------"); System.out.println("str1.getClass() : " + str1.getClass()); System.out.println("str2.getClass() : " + str2.getClass()); System.out.println("------------------------------------"); System.out.println("str1.toString() : " + str1.toString()); System.out.println("str2.toString() : " + str2.toString()); }}那么这个时候 str1 和 str2 这两个 reference 指的是同一个 reference ,执行结果如下:------------------------------------str1.hashCode() : 26795951str2.hashCode() : 26795951------------------------------------str1.clone() : [Ljava.lang.String;@1858610str2.clone() : [Ljava.lang.String;@12498b5------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@198dfafstr2.toString() : [Ljava.lang.String;@198dfaf这个时候只有 clone()方法的结果不一样。这是为什么?仅凭这个就能说明他们有区别吗,不能,我又做了如下的改动:************************************************************************public class Test { public Test() { } public static void main(String[] args){ String[] str1 = { "aaa" , "bbb" , "ccc" } ; String[] str2 = str1 ; System.out.println("------------------------------------"); System.out.println("str1.hashCode() : " + str1.hashCode()); System.out.println("str2.hashCode() : " + str2.hashCode()); System.out.println("------------------------------------"); System.out.println("str1.clone() : " + str1.clone()); System.out.println("str2.clone() : " + str2.clone()); System.out.println("------------------------------------"); System.out.println("str1.getClass() : " + str1.getClass()); System.out.println("str2.getClass() : " + str2.getClass()); System.out.println("------------------------------------"); System.out.println("str1.toString() : " + str1.toString()); System.out.println("str2.toString() : " + str2.toString()); }}那么这个时候,str1 和 str2 应该说是没有什么区别的了,但是,结果如下:------------------------------------str1.hashCode() : 26795951str2.hashCode() : 26795951------------------------------------str1.clone() : [Ljava.lang.String;@1858610str2.clone() : [Ljava.lang.String;@12498b5------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@198dfafstr2.toString() : [Ljava.lang.String;@198dfaf和第二中方式的结果相同,这些都是为什么????? 主要是String是个定长字符串,JVM在新建一个字符串引用的时候,会到字符串池中去寻找,如果有相同的对象,那么就不会去新建一个字符串对象,所以第一个引用和新建的字符串引用的是一个对象............ 楼主好搞笑呀clone方法每次调用获得都是一个新的对象,当然是不一样的.你的测试到底要干什么? java交流群-22065798互相学习 共同提高 treeroot(旗鲁特) ( ) 信誉:106 2006-03-29 09:02:00 得分: 0 楼主好搞笑呀clone方法每次调用获得都是一个新的对象,当然是不一样的.你的测试到底要干什么? --------------------写出来以后,才发现自己特搞笑!一时就想找个什么不一样的出来,所以,把所有的方法,都用了,竟然都没有注意,是干什么呢方法。谢谢! hero222(笑傲江湖) ( ) 信誉:100 2006-03-29 09:21:00 得分: 0 二强,有必要这么钻牛角? ----------------------------昨天突然想到这个了,就想知道个究竟!哈哈,,, 问题总结:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。两种写法是没有区别的。 肯定没有区别,只是失主荐合用前者String[] a,前者很容易认为变量a是一个数组,这是我曾经无意识过的一道题目,后者不能一眼看出是一个数组 你这么写时基本上没有区别的,其实本质上还是有区别的,我举个例子String[] aaa,bbb;和String aaa[],bbb;这样就可以看出区别了,用第一种方法定义的aaa和bbb都是String的数组,而第二种方法定义的只有aaa是数组,bbb是String对象。 问题总结:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。两种写法是没有区别的。 java Applet 小程序 的图片无法在网页上显示 java相对路径求助 这是What? 100分求比较全面的POI操作excel文件的例子 【求助】请问能向Collection类中装入基本类型的数据么? 正则表达式 大哥们帮忙 这句代码很奇怪,怎么这么写,是什么用法?在线 java设置日期格式 关于集合和继承器的问题 IO流同时读N个文件并且是读一行对比一行的 感觉有点无从下手 大家帮忙看看这段你码,有错误,指点指点! 一般System.out.print()参数是String,但是为什么long类型的也可以呢?
可能是我记错了吧!明天揭贴!
比如说,他们已经进行了初始化,
那么:
String[] aaa;//指的是第一个元素的头地址
String aaa[];//其中的每一个,指向所包含元素的地址。有这样的区别吗?
String aaa[];
只是写法上的区别,但理解上有点不同:String[] aaa这样写是把数组也当成对象来表示了(注意数组本来就是对象,但是通过String[] 更加突出其对象特性)su
写了一个Test.java类:
如下:public class Test {
public Test() {
} public static void main(String[] args){
String[] str1 = { "aaa" , "bbb" , "ccc" } ;
String str2[] = { "aaa" , "bbb" , "ccc" } ; System.out.println("------------------------------------");
System.out.println("str1.hashCode() : " + str1.hashCode());
System.out.println("str2.hashCode() : " + str2.hashCode());
System.out.println("------------------------------------");
System.out.println("str1.clone() : " + str1.clone());
System.out.println("str2.clone() : " + str2.clone());
System.out.println("------------------------------------");
System.out.println("str1.getClass() : " + str1.getClass());
System.out.println("str2.getClass() : " + str2.getClass());
System.out.println("------------------------------------");
System.out.println("str1.toString() : " + str1.toString());
System.out.println("str2.toString() : " + str2.toString());
}
}这个时候,str1 和 str2 指向的是不同的:
运行结果如下:
------------------------------------str1.hashCode() : 24561483str2.hashCode() : 18237215------------------------------------str1.clone() : [Ljava.lang.String;@1975b59str2.clone() : [Ljava.lang.String;@1ee3914------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@176c74bstr2.toString() : [Ljava.lang.String;@116471f这个时候,hashCode() ,clone() ,toString() 的值都不同,这个我能理解!**************************************************************************
可是,当我把程序做了如下的修改:
public class Test {
public Test() {
}
public static void main(String[] args){
String[] str1 = { "aaa" , "bbb" , "ccc" } ;
String str2[] = str1 ;
System.out.println("------------------------------------");
System.out.println("str1.hashCode() : " + str1.hashCode());
System.out.println("str2.hashCode() : " + str2.hashCode());
System.out.println("------------------------------------");
System.out.println("str1.clone() : " + str1.clone());
System.out.println("str2.clone() : " + str2.clone());
System.out.println("------------------------------------");
System.out.println("str1.getClass() : " + str1.getClass());
System.out.println("str2.getClass() : " + str2.getClass());
System.out.println("------------------------------------");
System.out.println("str1.toString() : " + str1.toString());
System.out.println("str2.toString() : " + str2.toString());
}
}
那么这个时候 str1 和 str2 这两个 reference 指的是同一个 reference ,执行结果如下:
------------------------------------str1.hashCode() : 26795951str2.hashCode() : 26795951------------------------------------str1.clone() : [Ljava.lang.String;@1858610str2.clone() : [Ljava.lang.String;@12498b5------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@198dfafstr2.toString() : [Ljava.lang.String;@198dfaf这个时候只有 clone()方法的结果不一样。这是为什么?仅凭这个就能说明他们有区别吗,不能,我又做了如下的改动:
************************************************************************
public class Test {
public Test() {
}
public static void main(String[] args){
String[] str1 = { "aaa" , "bbb" , "ccc" } ;
String[] str2 = str1 ;
System.out.println("------------------------------------");
System.out.println("str1.hashCode() : " + str1.hashCode());
System.out.println("str2.hashCode() : " + str2.hashCode());
System.out.println("------------------------------------");
System.out.println("str1.clone() : " + str1.clone());
System.out.println("str2.clone() : " + str2.clone());
System.out.println("------------------------------------");
System.out.println("str1.getClass() : " + str1.getClass());
System.out.println("str2.getClass() : " + str2.getClass());
System.out.println("------------------------------------");
System.out.println("str1.toString() : " + str1.toString());
System.out.println("str2.toString() : " + str2.toString());
}
}
那么这个时候,str1 和 str2 应该说是没有什么区别的了,
但是,结果如下:
------------------------------------str1.hashCode() : 26795951str2.hashCode() : 26795951------------------------------------str1.clone() : [Ljava.lang.String;@1858610str2.clone() : [Ljava.lang.String;@12498b5------------------------------------str1.getClass() : class [Ljava.lang.String;str2.getClass() : class [Ljava.lang.String;------------------------------------str1.toString() : [Ljava.lang.String;@198dfafstr2.toString() : [Ljava.lang.String;@198dfaf
和第二中方式的结果相同,这些都是为什么?????
clone方法每次调用获得都是一个新的对象,当然是不一样的.
你的测试到底要干什么?
互相学习 共同提高
楼主好搞笑呀
clone方法每次调用获得都是一个新的对象,当然是不一样的.
你的测试到底要干什么?
--------------------
写出来以后,才发现自己特搞笑!
一时就想找个什么不一样的出来,
所以,把所有的方法,都用了,
竟然都没有注意,是干什么呢方法。谢谢!
二强,有必要这么钻牛角?
----------------------------
昨天突然想到这个了,就想知道个究竟!
哈哈,,,
String[] aaa,bbb;
和String aaa[],bbb;
这样就可以看出区别了,用第一种方法定义的aaa和bbb都是String的数组,而第二种方法定义的只有aaa是数组,bbb是String对象。