zoukankan      html  css  js  c++  java
  • Java中String的 "引用" 传递

    1、来看一段有趣但又让人困惑的代码片段

    public static void main(String[] args){
            String x = new String("ab");
            change(x);
            System.out.println(x);
        }
        
        public static void change(String x){
            x = "cd";
        }

    打印结果:"ab"

    2、这段代码真正做了什么呢?来解释一下这个过程

    首先,当字符串"ab"被创建时,Java分配内存来存储这个字符串常量;然后,这个字符串常量被赋值给了变量x,x实际上保存的是这个字符串对象的引用地址(内存中的地址);x变量保存了字符串对象的引用,x并不是引用本身,它仅仅保存的是内存的引用地址;

    而在Java中,都是“值传递”;当x传递给change()方法时,实际上传递的是变量 x 的拷贝;change()方法又创建了一个新的字符串对象"cd",并赋值给了变量x的拷贝,"cd"对象的内存引用地址是不同的!

    3、怎么解决这个问题呢?

    如果我们确实希望改变这个对象。首先这个对象必须是可变的;第二,需要保证不会创建新的对象赋值给参数变量,因为Java仅仅是值传递

    public static void main(String[] args) {
        StringBuilder x = new StringBuilder("ab");
        change(x);
        System.out.println(x);
        }
         
        public static void change(StringBuilder x) {
            x.delete(0, 2).append("cd");
        }
  • 相关阅读:
    【转】谈谈 JVM 内部锁升级过程
    TCP 和 UDP 协议简介
    《分布式系统原理介绍》读书笔记
    Paxos 协议简单介绍
    Lease 机制和 Quorum 机制
    HBase 学习二(最佳实践).
    HBase 学习一(基础入门).
    Spring 事务介绍
    《MySQL技术内幕:InnoDB存储引擎》读书笔记.
    数据库事务简介.
  • 原文地址:https://www.cnblogs.com/lianliang/p/5328850.html
Copyright © 2011-2022 走看看