当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++实践之超级for循环以及list与java中的差异讲解

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

2018年02月08日  | 移动技术网IT编程  | 我要评论

卡洛斯切拉,长江三峡旅游,工程项目信息网

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++中就需要加上&取地址符以变成传址。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网