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