今天看了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
注意:本文归作者所有,未经作者允许,不得转载