键盘手C
2016-04-17 15:40
采纳率: 60%
浏览 3.2k
已采纳

java中的引用和new的用法

初学java,有些问题很幼稚,还望各位大神能多扶持
首先,说说引用的问题,
我定义了一个A类。其中初始化属性name为A,
接下来:
A a = new A;//创建一个对象
A a1 = a;//这里好像是一个引用,有点不懂,我把他理解为指针,
a = new A; // 这是第二个问题,在创建对象的时候,一般不都是类 对象 = new 类吗?为什么这里可以直接new呢,而且看教程上是说又新分配了一个空间,我想问的是只要是new,都是分配存储空间吗,及即使不创建对象
//
还有补充一点,在第三行代码中,由于是新分配了一个空间,第一二条代码相当于a1指向原来a指向的空间,然后后来a又指向了一个新的内存,在这个时候,a指向了两个存储空间,教程上说a指向原来的空间这就作废了,然后这时,a1指向了两个空间,
教程上说这时a1指向了原来a指向的空间,这里我就不明白了,为什么,
还望各位指教

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • threenewbee 2016-04-17 15:44
    已采纳

    int i = 3;
    i = 4; //为什么这里不写int?能明白么?因为i已经定义了。

    或者说int i = 3;其实是如下两行
    int i; //在此之前不知道什么是i,需要定义
    i = 3;//赋值

    用了new都是分配了空间。

    打赏 评论
  • 键盘手C 2016-04-17 15:47

    哦哦,多谢,
    还有关于一个引用的问题,为什么a原来指向的会作废呢
    还有后来为什么a1的指向是原来a的呢

    打赏 评论
  • threenewbee 2016-04-17 15:47

    a不可能同时指向两个空间,它指向第二个,那么就和第一个没关系了。那么第一个是否“作废”呢?这个不一定,要看有没有别的变量指向它,如果都没有了,才“作废”。
    比如
    A a = new A();
    a = new A(); //此时第一个“作废”了。
    再比如
    A a = new A();
    A a1 = a; //此时2个引用指向一个空间
    a = new A(); //此时a1还是指向上一个,a指向新的,那么两个空间都有效。
    a1 = a; //此时第一个空间“作废”。

    打赏 评论
  • threenewbee 2016-04-17 15:53

    “作废”的判断标准是,没有任何对象指向它了。为什么a1还指向a,因为a1没有改过

    看如下代码:
    int a = 1;
    int a1 = a;
    a = 2;
    //此时为什么a1还是1???

    打赏 评论
  • sinat_30742169 2016-04-17 15:57

    A a 在栈里边声明了一下 =new A();在堆里边开辟了一块内存
    A a1=a; 在栈里边声明了 a1=a; 声明了两个变量(a,a1)
    a= new A ; 在堆里边开辟了新的内存, 由于a1=a;变量名相同,所以就指向了新的内存地址,原来的就作废了(比如说:你10年前买的房子,现在想盖一座新的房子,是不是把原来的房子拆掉,新的房子才能建起来。旧房子就是第一个地址,新房子就是新开辟的地址。)

    打赏 评论

相关推荐 更多相似问题