zoukankan      html  css  js  c++  java
  • java 值传递和引用传递

    最近心血来潮看了看Java中的值传递和引用传递。

    根绝网上搜罗的资料都看晕了,比如说常量池里放的是对象还是对象的引用,很乱。

    不管怎么样,先按照如下记录一下:

    对于原始类型的变量(包括它们的封装类)和字符串类型String,就是值传递。

    结果就是,原始值不变。

    String a = "test";或者String a = new String("test");

    tests(a);

    System.out.println(a);//依旧是test,也可以认为String本身就是final类型的,不可更改

    分析为:可以认作把值("test")放在了常量池中,作为参数传递的过程中仅仅是串值。

    public void tests(String a){

      a = "testa";//可以认作是又新建了一个变量指向常量池里的testa,此时的a与传递的参数a不相同

      System.out.println(a);

    }

    但是涉及到具体的对象的时候,比方说StringBuffer sb = new StringBuffer("test");

    //对象test并不是在常量池里,而是在内存的堆(deap)中。

    把sb作为参数传递到方法里时:

    public void tests(StringBuffer sb){

      sb = sb.append("ddddd");

      System.out.println(sb);//打印出testddddd,而原始的sb也会变成testddddd。

      //原因就是他们传递的不是值,而是地址,对参数sb的操作,实际上就是对对象地址所对应的对象操作,(有点绕)所以原来就变了。

    }

    仅仅是个人的理解,欢迎拍砖。

  • 相关阅读:
    pyqt 过滤事件
    python 编码问题
    xpath使用
    BeautifulSoup
    webpack.config.js 大概架构(3)
    图片,html,和其他的打包(2)
    今天开始第一篇
    第一次面试前端,记录下
    阻止默认事件和冒泡
    cookit localStorage sessionStorage 区别
  • 原文地址:https://www.cnblogs.com/ihanliu/p/4371510.html
Copyright © 2011-2022 走看看