• 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
        }
    }
  • 相关阅读:
    python3 urllib 类
    python 金角大王博客园学习地址
    配置文件一mapper.xml
    配置文件一mybatis-config.xml
    配置文件一applicationContext.xml
    类文件路径一classpath
    配置文件一web.xml
    日志框架一logback配置和使用
    SpringBoot + redis实现分布式session共享
    SpringBoot集成Redis 一 分布式锁 与 缓存
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/6437606.html
Copyright © 2020-2023  润新知