5.Java的值传递和引用传递问题

Java的值传递和引用传递问题

String的对象是不可修改的,如果真正要达到改变字符串的效果,我们需要使用StringBuilder来替代String。

要想不改变原来的对象可以继承Cloneable接口,实现其clone()

public class demo {

    public static void main(String[] args) {
        String x = new String("way");
        changeString(x);
        System.out.println(x);

        StringBuilder xx = new StringBuilder("ss");
        changeStringBuilder(xx);
        System.out.println(xx.toString());

        Dest dest = new Dest();
        dest.kk = 99;
        changeObject1(dest);
        System.out.println(dest.kk);
        changeObject2(dest);
        System.out.println(dest.kk);
    }

    public static void changeString(String x) {
        x = "even";
    }

    public static void changeStringBuilder(StringBuilder x) {
        x.append("even");
    }

    public static void changeObject1(Dest x) {
        Dest yy = null;
        try {
            yy = (Dest) x.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        yy.kk = 100;
    }
    public static void changeObject2(Dest x) {
        x.kk = 101;
    }
}

class Dest implements Cloneable {
    public Dest() {
    }

    public int kk = 0;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出...
    yshenhn阅读 1,182评论 0 8
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,225评论 0 5
  • 个人笔记,方便自己查阅使用 Contents Java LangAssignment, ReferenceData...
    freenik阅读 1,405评论 0 6
  • 抽象,继承,封装,多态 下面将一一解释.抽象是将一类对象的共同特征总结出来构造类的过程.包括数据抽象和行为抽象两部...
    高珊珊aim阅读 961评论 0 0
  • 回 乡 偶 书少小离家老大回,乡音无改鬓毛衰。儿童相见不相识,笑问客从何处来。
    幸福的旁边阅读 1,125评论 0 1