首页 > 编程语言 > 详细

Java 关于final那些事

时间:2017-02-24 12:30:47      阅读:133      评论:0      收藏:0      [点我收藏+]

先说结论:对于引用类型的变量,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
    }
}

 

Java 关于final那些事

原文:http://www.cnblogs.com/tengpan-cn/p/6437606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!