欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++实践之超级for循环以及list与java中的差异讲解

程序员文章站 2022-06-24 20:19:56
在Java中的For循环中可以直接修改对象的属性 import java.util.ArrayList; import java.util.List; import ja...

Java中的For循环中可以直接修改对象的属性

import java.util.ArrayList;
import java.util.List;
import java.util.regex.*;

public class main {
    static class Student {
        String name;
        int id;
        public Student(String name, int id) {
            this.name = name;
            this.id = id;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "Student [name=" + name + ", id=" + id + "]";
        }
    }

    public static void main(String[] args) {
        List mStudents = new ArrayList();
        mStudents.add(new Student("Tony", 1));
        mStudents.add(new Student("Lili", 2));

        System.out.println("BEFORE: " + mStudents);

        for (Student student : mStudents) {
            if (student.id == 1) {
                student.setName("zhangsan");
            }
        }

        System.out.println("AFTER: " + mStudents);
    }
}

运行结果:

BEFORE: [Student [name=Tony, id=1], Student [name=Lili, id=2]]
AFTER: [Student [name=zhangsan, id=1], Student [name=Lili, id=2]]

而在C++中直接修改不会改变List中的对象属性。结果如下:

        for (Student student : mStudents) {
            if (student.id == 1) {
                student.setName("zhangsan");
            }
        }

需要加上取地址符才能达到java中的效果:

        for (Student &student : mStudents) {
            if (student.id == 1) {
                student.setName("zhangsan");
            }
        }

因为C++中讲究传值和传址。而java中并没有这个区分,都是传址,所以在子函数可以直接修改传递过来对象的属性值。而C++中就需要加上&取地址符以变成传址。