zoukankan      html  css  js  c++  java
  • Java 关于final那些事

    先说结论:对于引用类型的变量,Java本身会创建两个东西,一个是对象本身,另一个是记录对象地址的一个int值,将引用类型的对象声明为final实际上是固定记录地址的那个int的值不能改变,如果通过某种途径改变了对象本身,那么对象也就变了!

    看测试代码:

    /*
     * Copyright (c) 2017. Panteng.Co.Ltd All rights reserved
     */
    
    package com.pt.memo;
    
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @description
     * @author panteng
     * @date 17-2-24.
     */
    public class FinalTest {
        @Test
        public void finalTest(){
            final Map<String, String> map = new HashMap<String, String>();
            map.put("test", "test1");//说明对象本身是可以改变的
            //map = new HashMap<String, String>();  //此处编译错误,说明对象的引用是不可变的
    
            Map<String, String> map2 = map;
            map2.put("test", "test2");  //此处会修改map的值,说明map2 和 map指向同一个对象
    
            System.out.println(map.get("test"));
            map2 = new HashMap<String, String>();   //为map2设置一个新的引用,说明final 没有从map传递到map2,也就是只能在声明时指定final才起作用
            map2.put("test", "test3");
            System.out.println(map2.get("test"));   //test3
            System.out.println(map.get("test"));    //test2
        }
    }
  • 相关阅读:
    数据库字段包含反斜杠的查询处理
    sql中的日期时间处理
    查询时间的测试
    group by 和 聚合函数的使用
    比较版本号
    sql IIF函数的应用
    win10系统杀毒功能
    php性能的问题
    linux 下ab压力测试
    datatables的学习总结
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/6437606.html
Copyright © 2011-2022 走看看