String[] aaa; 
和 
String aaa[]; 他们的区别在那里?

解决方案 »

  1.   

    没有区别,Java支持两种不同的写法。但是建议使用第一种。
      

  2.   

    我看thinking in java 也说是没有区别,只是前一种写法,更合情理! 可是我似乎记得以前在什么地方看到过,说他们是有区别的,
    可能是我记错了吧!明天揭贴!
      

  3.   

    没区别, 第一种可读性更好, 明确表示了aaa是一个String数组.
      

  4.   

    由于数组是引用类型....,所以String[]aaa=new String[value];//value 是String内存空间的个数.所以,aaa类似c语言的指针.....
      

  5.   

    thinking in java 中的意思是这样的:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。对于,编程人员来说,两种写法是没有区别的。----------------------------------那么,它们在内部的实现机制上,比如,内存地址的分配上,有什么区别吗?
      

  6.   

    JAVA虚拟机上面的还是真实的内存里面的........
      

  7.   

    这两种方式,其实都是定义了一个 reference 有没有这个的区别,:
    比如说,他们已经进行了初始化,
    那么:
    String[] aaa;//指的是第一个元素的头地址
    String aaa[];//其中的每一个,指向所包含元素的地址。有这样的区别吗?
      

  8.   

    String[] aaa; 
    String aaa[]; 
    只是写法上的区别,但理解上有点不同:String[] aaa这样写是把数组也当成对象来表示了(注意数组本来就是对象,但是通过String[] 更加突出其对象特性)su
      

  9.   

    不应该是aaa指向第一个元素的头地址(实际上就是数组的引用),而每一个元素aaa[index]指向每一个String的对象.....(两种表示在这一点没有区别...)
      

  10.   

    刚才做了一个测试:
    写了一个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
    和第二中方式的结果相同,这些都是为什么?????
      

  11.   

    主要是String是个定长字符串,JVM在新建一个字符串引用的时候,会到字符串池中去寻找,如果有相同的对象,那么就不会去新建一个字符串对象,所以第一个引用和新建的字符串引用的是一个对象............
      

  12.   

    楼主好搞笑呀
    clone方法每次调用获得都是一个新的对象,当然是不一样的.
    你的测试到底要干什么?
      

  13.   

    java交流群-22065798
    互相学习 共同提高
      

  14.   

    treeroot(旗鲁特) ( ) 信誉:106  2006-03-29 09:02:00  得分: 0  
     
     
       楼主好搞笑呀
    clone方法每次调用获得都是一个新的对象,当然是不一样的.
    你的测试到底要干什么?
      
     
    --------------------
    写出来以后,才发现自己特搞笑!
    一时就想找个什么不一样的出来,
    所以,把所有的方法,都用了,
    竟然都没有注意,是干什么呢方法。谢谢!
      

  15.   

    hero222(笑傲江湖) ( ) 信誉:100  2006-03-29 09:21:00  得分: 0  
     
     
       二强,有必要这么钻牛角?
      
     
    ----------------------------
    昨天突然想到这个了,就想知道个究竟!
    哈哈,,,
      

  16.   

    问题总结:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。两种写法是没有区别的。
      

  17.   

    肯定没有区别,只是失主荐合用前者String[] a,前者很容易认为变量a是一个数组,这是我曾经无意识过的一道题目,后者不能一眼看出是一个数组
      

  18.   

    你这么写时基本上没有区别的,其实本质上还是有区别的,我举个例子
    String[] aaa,bbb;
    和String aaa[],bbb;
    这样就可以看出区别了,用第一种方法定义的aaa和bbb都是String的数组,而第二种方法定义的只有aaa是数组,bbb是String对象。
      

  19.   

    问题总结:String[] aaa; // aaa 是一个 String 类型的数组String aaa; // aaa 是一个数组,其中的每一个元素都是 String 类型的所以,第一中写法,更明确,更合理。两种写法是没有区别的。