永发信息网

1、为什么counter是中为1? 2、怎样在main方法中输出counter的值? 求大神分析一下,感觉很混乱。

答案:2  悬赏:80  手机版
解决时间 2021-03-27 08:07
  • 提问者网友:人傍凄凉立暮秋
  • 2021-03-26 16:47
1、为什么counter是中为1? 2、怎样在main方法中输出counter的值? 求大神分析一下,感觉很混乱。
最佳答案
  • 五星知识达人网友:渡鹤影
  • 2021-03-26 17:14
public int maybeNew(int index) {
if (index < 5) {
Mix4 m4 = new Mix4();

System.out.println("counter:" + counter);
// 我在这里输出了一下counter==1,也就是传进来就为一了,是上面那个位置改的吗?那下面的m4.counter不应该==2吗,为什么仍然为一?
m4.counter = m4.counter + 1;
System.out.println("counter:" + counter);
// 我有输出了一下counter,为什么依然为1,m4.counter改变不了吗?
return 1;
}
return 0;
}追问您的意思是输出的第一个counter是m4a[x].counter的值吗?可是不是应该是全局变量的counter吗?追答想哭,我建议你新写一个测试类,然后把main方法里面的内容放到测试类里面;counter怎么会是全局的呢,你加个static 试试追问懂了,懂了。
第一个输出,输出的是m4a[x]对象中的counter对吧,
可不可以理解为无论对象怎么变化,类中的变量都不会随之改变呀。追答主要看这个变量是哪个对象的,如果你把counter 变成static的,它的结果是不一样的。这里面就有个变量的作用域的问题追问嗯嗯,谢谢谢谢,太感谢啦。
全部回答
  • 1楼网友:醉吻情书
  • 2021-03-26 17:48
说说你得题目追问

我实在是不知道counter值是怎么变化的。。
追答
这样子你看看懂不懂:public class Mix4 {
    int counter = 0;
    public static void main( String [] args) {
        int count = 0;
        Mix4 [] m4a = new Mix4[20];
        int x = 0;
        while(x < 9) {
            m4a[x] = new Mix4(); //每次循环都创建了一个新的对象
            m4a[x].counter = m4a[x].counter + 1; //m4a[0].counter==1,counter变为1吗?
            count = count + 1;
            count = count + m4a[x].maybeNew(x);
            x = x+1;
        }
        System.out.println(count + " " + m4a[1].counter);
    }
    public int maybeNew(int index) {
        if(index < 5) {
            Mix4 m4 = new Mix4(); //每次调用maybeNew都创建了一个新的对象
//这里输出的其实相当于输出this.counter,也就是调用maybeNer方法的当前对象的counter变量的值
            System.out.println("counter:" + counter);
//这里改变的是maybeNew方法中的m4的counter值,而不是this.counter的值
            m4.counter = m4.counter + 1;
//这里输出的还是this.counter
            System.out.println("counter:" + counter);
            return 1;
        }
        return 0;
    }
}
这种代码写法不规范,一般就出题老师喜欢这样写出来迷糊答题者,开发中这样写会被打死的。追问谢谢谢谢,终于搞懂了。追答不客气
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯