zoukankan      html  css  js  c++  java
  • 关于不可变性与可变性的“嵌套”联想

    先给出定义:

    先申述一个概念:变量 = 引用 + 值(也就是:该变量初始化的内存)

    可变性与不可变性:引用可变与否,值可变与否。

    值的可变性取决于:值的类型是否是可变的,这取决于创建该值的类是否可变。

    而引用的可变性取决于:该变量命名时是否前缀有(final)。

    那么对于一个对象而言,其不可变性的程度:是什么?

    一个对象的数据成员是变量,其具有引用与值。那么当声明该对象具有不可变性时,其内的数据成员的值与引用可变与否?引用可变否?值可变否?

    人为定义的不可变类:可以自己进行设定,没有讨论的必要。

    库中的不可变类:基本数据类型的包装类也没有讨论的必要。

                                 Collection的不可变包装类也无讨论必要,因为在某种程度上,其是直接将地址进行纳入,不存在引用变量,其只是保证其内的元素不被添加, 而未保证其内的元素的值不被修改。

    class test {
        
        public static void main(String[] args) {
           in A = new in(5,6);
           in B = new in(5,6);
           List<in> list = new ArrayList<>();
           list.add(A);
           List<in> listcopy = java.util.Collections.unmodifiableList(list);
           for(in p : listcopy) p.print();
           in C =listcopy.get(0) ;
           C.a = 99;
           for(in p : listcopy) p.print();
       }
    }
    class in{
        public int a;
        public int b;
        public in(int a,int b) {
            this.a = a;
            this.b = b;
        }
        public void print() {
            System.out.println(a+" "+b);
        }
    }

  • 相关阅读:
    5.scala中的对象
    4.scala中的类
    第八章 前端框架
    第六章 用户管理
    第五章 权限验证
    第四章 功能初始化
    第三章 项目结构
    第二章 基于二进制进行权限管理的理论知识
    第一章 权限管理DEMO简介
    NopCommerce源代码分析之用户验证和权限管理
  • 原文地址:https://www.cnblogs.com/zqybegin/p/12658360.html
Copyright © 2011-2022 走看看