• 深入理解Java中的引用的含义与原理


    一句话:引用就是指向那个对像.

    String str="aa";
    str有本身的内存,是一个变量,而对像"aa"也有它自己的内存空间。这时候说str引用"aa"这个对像.
    
    String tt=null;
    这里的tt也是一个引用变量,但是它没有引用具体的对像.
    
    String str="aa";
    String tt=str;
    这里str与tt都是一个引用变量(属于String类型的,只能引用String类型对像),记住:str它的内存空间里的值是一个地址值,tt的内存空间也是一个地址值.
    它们的值就是具体对像的首地址(首地址也就是内存地址)
    

    str 的值为AD12EE51一个地址值 
    "aa" 这两个字符(也就是具体的对像)在内存里分配空间的时候首地 址也就是AD12EE51

    JVM会知道它们是不是引用变量(相对于原始类型int ,long等变量),JVM知道一个变量为原始变量的时候就会根据它们的值-->一个地址值 再去访问具体的内存空间,也就是访问到具体的对像.因为tt=str;就是把str的值-->一个地址值复制给tt,所以在运行 的时候JVM发现tt也是一个引用变量,就根据它的值(与str的值一样) 去访问具体的内存空间,因为tt与str的值相等,所以说:tt与str引用对一个对像.

    关于引用传值:

    1 StringBuffer  sb = new StringBuffer();

    sb是一个引用变量,当执行到new StringBuffer()的时候就会分配一段内存空间给这个对像使用,并把这段空间的首地址返回,也就是把首地址返回给sb变量,就形成了"sb引用这个对像".

    有一个方法:

     
     void addString(StringBuffer sbe)
      {
     sbe.append("function");
     }
     下边这段代码:
    StringBuffer sb = new StringBuffer();
     sb.append("hh");
     addString(sb);
     System.out.println(sb.toString());
     结果是:hhfunction
     原理:sb引用一个具体的对像,它的值是一个StringBuffer对像的首地址,执行到sb.append("hh");在那个具体对像的地方就会加上这个"hh"字符串,然后执行到
    addString(sb);实际就是把sb的值(什么值?
    想想)传给方法里的参数,那个方法的参数StringBuffer sbe只是一个引用变量,当执行这句代码的时候就是把sb的值传给sbe,
    然后执行方法时的代码,sbe 与sb都是引用同一个对像,因为它们的值相同.所以在方法里访问sbe实际就是访问原来sb所指向的那个对像.
    相当与下边这段代码
    StringBuffer sb = new StringBuffer(); sb.append("hh");
     StringBuffer sbe=null;//这里相当与方法的参数 sbe=sb;

    调用方法的时候就会执行这样的结果,把sb的值给与sbe sbe.append("function");//这一句相当与方法里的代码. 结果也是hhfunction.

    有时候说sb这个对像,实际就是说sb所引用的那个对像.
  • 相关阅读:
    【Jmeter】分布式并发测试
    【博客迁移】
    设置超出范围有滚动条
    table中td,th不能设置margin
    文字和input对不齐怎么办
    改变radio单选按钮的样式
    transition的用法以及animation的用法
    选择后代元素或点击元素的方法
    如何简单实用hammer
    添加aimate动画
  • 原文地址:https://www.cnblogs.com/AndyNikolas/p/6398900.html
Copyright © 2020-2023  润新知