zoukankan      html  css  js  c++  java
  • 集合和数组保存对象的引用变量(区别C++的STL实现)

    一个基本概念:
    数组可以保存基本类型的值和对象,而集合只可以保存对象,实际上说具体点应该是数组和集合都是保存的对象的引用变量,而不是具体的内存对象.

    下面一个例子加以说明:

    import java.util.ArrayList;
    
    public class Test {
        static class Person{
            public Person(String n){
                name = n;
            }
            
            @Override
            public String toString() {
                return name;
            }
            
            public String name;
        }
        
        
        public static void main(String[] args) {
            System.out.println("test");
            
            Person p = new Person("aa");
            Person p1 = new Person("bb");
            
            ArrayList<Person> personList = new ArrayList<Test.Person>();
            personList.add(p);
            personList.add(p1);
            
            for (Person person : personList) {
                System.out.println(person); //输出 aa bb
            }
            
            p.name = "cc";
            
            for (Person person : personList) {
                System.out.println(person);//输出 cc bb
            }
        }
    }

    上面的这个例子我们一定要明确,因为JAVA的集合是保存的对象的引用变量,而不是具体内存对象,但是C++的STL容器就不一样了,
    C++的STL 容器是在增加对象到容器时候,容器时会重新分配内存的来保存增加对象,我们通过下面的例子来说明C++容器内存相关:

    #include <iostream>
    #include <list>
    #include <iterator>
    #include <string>
    
    using namespace std;
    
    class Person
    {
    public:
        Person(string n):mName(n)
        {
        }
    
    public:
        string mName;
    };
    
    
    int main()
    {
        Person p("aa");
        Person p1("bb");
    
        list<Person> personList;
        personList.push_back(p);
        personList.push_back(p1);
    
        list<Person>::iterator it ;
    
        for(it = personList.begin();it != personList.end();it++){
            cout << (*it).mName << endl; //aa bb
        }
    
        p.mName = "cc";
    
        for(it = personList.begin();it != personList.end();it++){
            cout << (*it).mName << endl;//aa bb 
        }
    
        return 0;
    }
  • 相关阅读:
    GC之五--SystemGC完全解读
    Java堆外内存之二:堆外内存使用总结
    Spring @Async之二:SpringBoot 自定义线程池,修改springboot的默认线程池
    JVM内存模型
    JDK源码包结构分类
    命令查看java的class字节码文件、verbose、synchronize、javac、javap
    重谈设计
    站点架构模式
    愚人节,不恶搞,我们玩真的。不服来战!
    Project Euler:Problem 86 Cuboid route
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2969901.html
Copyright © 2011-2022 走看看