Java - [参数传递] - 传值还是传址?(引用)

今天看了Java中的参数传递机制,给我整懵了,网上大佬说Java只有传值没有传址(参考第24题https://www.cnblogs.com/lanxuezaipiao/p/3371224.html,所以究竟是“传值”还是“传址(传引用)”,无奈之下自己总结参数传递的几种情况,你会明白一些。(我自己其实更倾向于 Java只有传值,没有传址)

package org.jackie.leetcode.algorithm.primary;

/**
 * @author Jackie Wang
 * 项目名称:hello-leetcode  
 * 类名称:ValueOrQuote  
 * 类描述:Java - [参数传递] - 传值还是传地址?(引用) https://blog.csdn.net/duan20140614/article/details/93064879
 * 创建时间:2022年8月18日 上午11:47:27  
 */
public class ValueOrQuote {
    public int i =0;

    public ValueOrQuote(int i) {
        this.i =i;
    }

    public static void main(String[] args) {
        //第一种
        int i =5;
        method1(i);
        System.out.println("调用之后的值: "+i+"\n");

        //第二种
        Float f =1.11f;
        method2(f);
        System.out.println("调用之后的值: "+f+"\n");

        //第三种
        String s ="你好";
        method3(s);
        System.out.println("调用之后的值: "+s+"\n");

        //第四种
        String [] strs = new String[2];
        strs[0]="一";       strs[1]="二";

        for(int j = 0; j < strs.length; j++){
            System.out.print(strs[j] + "  ");
        }
        method4(strs);
        System.out.println( "  ");

        for(int j = 0; j < strs.length; j++){
            System.out.print("调用之后的值: "+strs[j] + "  ");
        }

        //第五种
        ValueOrQuote vQuote = new ValueOrQuote(6);
        method5(vQuote);
        System.out.println("调用之后的值: "+vQuote.i+"\n");

        //第六种
        StringBuffer sb = new StringBuffer("Hello ");
        System.out.println("Before change, sb = " + sb);
        method6(sb);
        System.out.println("After method6(sb), sb = " + sb + "\n");
        //第七种
        StringBuffer buffer = new StringBuffer("Hello ");
        System.out.println("Before change, buffer = " + buffer);
        method7(buffer);
        System.out.println("After method7(buffer), buffer = " + buffer + "\n");

        //第八种
        StringBuffer a = new StringBuffer("Hello");
        StringBuffer b = a;
        b.append(", World");
        System.out.println("a is " + a);


    }

   public static void method1(int i) {
       i= i+10;
       System.out.println("在方法内的值: "+i+"\n");
    }

   public static void method2(Float f){
       f= f+10;
       System.out.println("在方法内的值: "+f+"\n");
   }

   public static void method3(String s){
       s= s+"world";
       System.out.println("在方法内的值:"+s+"\n");
   }

   public static void method4(String[] strs){
       strs[0]="三";
   }


   public static void method5(ValueOrQuote valueOrQuote){
        valueOrQuote.i+=10;
        System.out.println("在方法内的值:"+valueOrQuote.i);
   }

   public static void method6(StringBuffer strBuf) {
       strBuf = new StringBuffer("Hi ");
       strBuf.append("World!");
   }

   public static void method7(StringBuffer strBuf) {
       strBuf.append("World!");
   }

}

运行结果:

在方法内的值: 15

调用之后的值: 5

在方法内的值: 11.11

调用之后的值: 1.11

在方法内的值:你好world

调用之后的值: 你好

一  二    
调用之后的值: 三  调用之后的值: 二  

在方法内的值:16
调用之后的值: 16

Before change, sb = Hello 
After method6(sb), sb = Hello 

Before change, buffer = Hello 
After method7(buffer), buffer = Hello World!

a is Hello, World

已有 0 条评论

    感谢参与互动!