You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求解释Java数组中对象相关的Mix4示例代码

我来帮你把这段Java代码拆解开,一步步捋清楚就好懂啦~

首先先把完整的代码补全(原代码里的maybeNew方法被截断了,这类练习题里它的实现通常是这样的):

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<19) {
            m4a[x] = new Mix4();
            m4a[x].counter = m4a[x].counter+1;
            count = count+1;
            count = count+m4a[x].maybeNew(x);
            x = x+1;
        }
        System.out.println(count+" "+m4a[1].counter);
    }

    // 常见的maybeNew方法实现
    int maybeNew(int x) {
        if(x%2 == 0) {
            this.counter++;
            return 1;
        } else {
            Mix4 m = new Mix4();
            m.counter++;
            return 2;
        }
    }
}

接下来我们分模块拆解:

核心概念先理清
  • 成员变量counter:属于Mix4类的实例对象,每个Mix4对象都有自己独立的counter值,不是所有对象共享同一个。
  • 数组m4a:这是一个能装20个Mix4对象引用的数组,刚创建时数组里全是null(没有实际对象),只有循环里执行new Mix4()后,才会把真实的对象放进数组对应位置。
main方法执行流程拆解

初始化环节

  • int count = 0;:定义一个局部变量count,用来统计后续累加的数值,初始为0。
  • Mix4[] m4a = new Mix4[20];:创建长度为20的数组容器,此时数组里20个位置都是空的,没有Mix4对象。
  • int x = 0;:循环计数器,用来控制循环次数,初始为0。

while循环(共执行19次,x从0到18)

每次循环按顺序做这些事:

  1. 创建对象并放入数组:m4a[x] = new Mix4();
    每次执行new Mix4()都会生成一个全新的Mix4实例,这个实例的counter默认是0(Java中int类型成员变量默认初始化值为0)。
  2. 当前数组对象的counter自增:m4a[x].counter = m4a[x].counter+1;
    刚创建的对象counter是0,执行完这行就变成1了。
  3. count加1:count = count+1;
    19次循环下来,这部分给count贡献了19。
  4. 调用maybeNew并累加返回值:count = count+m4a[x].maybeNew(x);
    这是最容易懵的地方,我们看maybeNew的逻辑:
    • 如果x是偶数(比如x=0、2、4...18):
      对当前数组里的m4a[x]对象的counter再次自增(从1变成2),然后返回1,所以count再加1。
    • 如果x是奇数(比如x=1、3...17):
      新建一个和数组无关的临时Mix4对象,把这个临时对象的counter从0改成1,然后返回2,所以count再加2。
      划重点:奇数时创建的临时对象不会放进数组,用完就会被回收,完全不影响数组里的元素!
  5. x自增1:x = x+1;,准备下一次循环。

循环结束后的输出

System.out.println(count+" "+m4a[1].counter);

  • 计算count的总值:19(基础累加) + 10次偶数循环的1(共10) + 9次奇数循环的2(共18)= 19+10+18=47。
  • m4a[1]是x=1时创建的对象,它的counter在步骤2变成1,而x=1是奇数,maybeNew里没有修改它的counter(而是改了临时对象的),所以它的counter值还是1。
容易踩坑的点
  • 别把成员变量counter和局部变量count搞混:一个是每个对象独有的,一个是main方法里唯一的。
  • 数组里的每个Mix4对象都是独立的,修改其中一个的counter不会影响其他的。
  • 奇数x时maybeNew创建的对象和数组无关,不会改变数组元素的状态。

内容的提问来源于stack exchange,提问作者user4884539

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:01:15