要表示别的元素的地址就是x+i(第i个元素的地址),建议楼主去看看c语言的指针。

解决方案 »

  1.   

    简单的说  你要是写 int k; 那么你的k 在栈里 分配的
    你要是写 int *k = new int ; 那么你的k  是在堆里分配的
      

  2.   

    int [] x;
    x = new int[10];
    //打印x的内存地址
    System.out.println(x);
    /打印的是堆内存中初始化的值。
    //System.out.println(x[0]);
    System.out.println(x[2]);
    System.out.println(args[0]);
    System.out.println(args);
    --------------------------
    首先x是引用它应该存储在栈中,而 new int[10];它们存在堆中,System.out.println(x);
    这句因该代表你声明数组的首地址,x[0]--x[10]它们代表确切的值,由于你没有进行初始化,所以基本类型会被初始化为0。
    ----------------------------------
    String [] y = new String []{new String(),new String(),new String()};
    for(int i=0;i<y.length;i++)
    {
    System.out.println("y["+i+"]="+y[i]);
    }
    System.out.println(args[0]);
    System.out.println(args);
    -----------------------------------------
    而后来你改为Sting类型,你也没有进行初始化,所以输出的都是空。
    而args也是代表引用所以输出的结果也是地址
      

  3.   

    to :tantao1982(dragoon)
    能给我写一个程序吗?我想知道第3个元素的地址,是:
    System.out.println(x+2);?吗?可是我的输出有问题:
    F:\javaview\lesson2>javac Test01.java
    Test01.java:8: operator + cannot be applied to int[],int
                    System.out.println(x+2);
                                        ^
    1 error
    -------------------------------------------------------------------
    to: azhengabc(阿政ABC)
    你要是写 int *k = new int ; 那么你的k  是在堆里分配的
    你的写发对吗?我用的是java语言啊!有点晕!-------------------------------------------------------------------
    to: yongfans(yongfan)
    前面的我都比较清楚了,就是在怎么求第i个元素的地址.有点不太清楚!
      

  4.   

    不管怎么说,Java的内存管理和模式跟C还是有根本上的不同。上面有些网友用C/C++的语法来说明Java的问题,楼主可以放心:Java中没有这些用法,也不能对"指针"做++操作以指向下一个内存地址。楼主问String[] strArray = new String[10];这样的语句怎么处理,我来说说看:对于数值类型的数组,new的时候会自动为元素赋初值,比如0;
    对于其他类型的数组,new数组的时候不会自动new其元素,但是会保留元素类型信息,不允许储存类型非法的引用。
      

  5.   

    new 的东西都在堆内存,其它都在栈内存string s[] = new String[10]s //在栈内存
    String[10] //堆内存,实际上是在堆中分配了10个String的指针根本上还是要注意JAVA只有基本类型和引用类型对等C/C++:
    string* s[] = new String*[10]
    如果你熟悉C/C++,就容易明白了
      

  6.   

    JAVA,C/C++用得混了,等于这个
    String** s = new String*[10];
      

  7.   

    再问:
    大家好啊,其实我要的就是在怎么求第i个元素的地址.有点不太清楚!
    不过我个人认为,好象不能求的。
    举个简单的例子
    class A
    {
    String name;
    int age;
    void c()
    {
    System.out.println("A.c()");
    }
    }
    public class B
    {
    public static void main(String [] args)
    {
    A a = new A();
    System.out.println(a);
    a.c();
    }
    }
    ---------------------------------------------------------------------------------
    输出结果为:F:\javaview>java B
    A@7172ea
    A.c()
    ---------------------------------------------------------------------------------等用new A();是在堆内存中对class A中的field都进行了初始化,即对name为null,对age为0;后将其对象附给reference a ,也就是a指向了堆内存的首地址。所以我认为如果是数组,也只能指向其首地址,而第i个元素的地址是不能知道的(我的看法)。
    不过我又有个疑问了,那CLASS A中的方法也要分配内存吧,那是在堆内存吗?那又是怎么分配的啊?
      

  8.   

    第i个元素的地址是不能知道,也不用知道,你能操纵它就行了class A 中方法是代码,在代码区(方法区)类变量才要分配到堆内存,不要把堆内存区和代码区的东西搞混了代码区的代码数据是编译器负责的,在运行前就静态分配好了,而堆的东西要运行时才用new动态分配