zoukankan      html  css  js  c++  java
  • Java final修饰形参

    转自:http://java.chinaitlab.com/base/836044.html

    public class BB{
    
      public int i;
    
    }
    
    public class PP{
    
      public static void f(final BB ref) //我的理解是无法修改ref
     {
       ref.i = 55;
      }
    
      public static void main(String args[]){
    
       BB x = new BB();
       f(x);
       System.out.println(x.i); //但事实上是修改了。。。,不知为什么????
      }
    }

      final修饰基本类型(int,double,...)时值不能改变:例final int a = 6;a 的值就是6,不能改.
      修饰引用类型时,是把引用的地址不能改变,但所引用的对象的值可以改变,

     就像上面举的那个例子:
      如果你想改变ref的引用地址是错误的.如:ref = new BB();是错的,但可以改变ref引用对象的值,如ref.i = 2;

    总结:对于基本类型,不可变指的是值;
        对于引用类型,不可变指的是引用地址

    读者自己的实验:

    package com.horizon;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Hello {
        public static void main(String[] args) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("key1", "00");
            new Hello().change01(map);
            System.out.println(map.get("key1"));
            new Hello().change02(map);
            System.out.println(map.get("key1"));
        }
    
        public void change01(Map<String, Object> map) {
            map.put("key1", "_01");
        }
    
        public void change02(final Map<String, Object> map) {
            map.put("key1", "_02");
        }
    
    }
  • 相关阅读:
    guaguia
    webapp手机移动端开发技巧
    两个数组对象对比
    json 根据某个子,寻找父节点的算法
    递归写法
    数组归类
    视频点击按钮下载
    微信小程序 直接跳转到首页
    iframe 跨域传值
    判断对象是否为空
  • 原文地址:https://www.cnblogs.com/tv151579/p/3293188.html
Copyright © 2011-2022 走看看