public class FF
{
static class IntA
{ private int a;
public IntA(int a){ this.a = a; }
public int getA() { return a; }
public void setA(int a){ this.a = a; } }
static public void change(int a){ a = 3; }
static public void change(IntA a){ a.setA(3); }
static public void changeRef(IntA a){ a = new IntA(19); }
public static void main(String[] args)
{ int a = 2;
change(a);
System.out.println(a);
IntA ia = new IntA(5);
change(ia);
System.out.println(ia.getA());
changeRef(ia);
System.out.println(ia.getA()); } }
结果是233
前面是23我可以理解
但最后一个3我实在不太清楚,为什么不是9而是3呢?
一个java小程序,不懂为什么这个结果,高手进
答案:4 悬赏:60 手机版
解决时间 2021-07-30 11:36
- 提问者网友:火车头
- 2021-07-30 05:18
最佳答案
- 五星知识达人网友:掌灯师
- 2021-07-30 05:45
因为对象类型在传参的时候,传递的是内存地址。
调用change(ia) ia和a,指向的是同一个对象,既然是同一个对象那么ia.a=a.a=3
调用changeRef(ia) ia指向的还是ia.a=3 这个对象,而a指向了一个新的对象new Integer(19);
因为你输出的ia.getA();所以是3
全部回答
- 1楼网友:迷人又混蛋
- 2021-07-30 09:12
static public void changeRef(IntA a){ a = new IntA(19); }
changeRef(ia);
传进去的ia和参数a虽然说是指向中一个内存, 但是它们是不同的引用, 你在方法中只是改变了a的指向, 但是对ia的指向并不会产生影响
- 2楼网友:青灯有味
- 2021-07-30 08:08
change(ia); ia和 a都指向堆内存里的IntA ia //ia.a=3
changeRef(ia); ia指向堆内从里的IntA ia//ia.a=3 a指向堆内存新的IntA()//a.a=19
这个主要是引用类型在搞鬼 类比c++里边的指针
- 3楼网友:北方的南先生
- 2021-07-30 06:36
因为程序先运行的构造函数
所以最后先输出3
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯