静态方法中的局部变量和其他对象进行二次赋值对原来值不影响?求解惑

public class Demo1 {
public static void main(String[] args) {
String s = "hello";
int a = 1;
Point p = new Point(1, 2);
Collection c = new ArrayList();
c.add(p);
test(s, a, p, c);
System.out.println("s:"+s);
System.out.println("a:"+a);
System.out.println("p:"+p);
System.out.println("c:"+c);
}
public static void test(String s,int a,Point p,Collection c){
a++;
s= s + "world";
p.setX(3);
p = new Point(4, 5);
c.clear();
c.add(p);
c = new ArrayList();
p.setX(7);
c.add(p);
}
}

运行结果及报错内容

s:hello
a:1
p:Point{x=3, y=2}
c:[Point{x=7, y=5}]

我的解答思路和尝试过的方法

为什么结果不是
s:helloworld
a:2
p:Point{x=7, y=5}
c:[Point{x=7, y=5}]

java方法的中你传入的参数是值传递
意思就是相当于复制了一份传了过去
test(s, a, p, c);
你的这里的s是传入的复制的字符串 因此test修改的是复制的字符串 跟main方法中的字符串没有关系
a是基本数据类型 传入的赋值的a 因此test中修改a不会影响main方法中的a
但是你的p和c是对象 传入的复制的引用
相当于test在改的是引用中的数据 因此会影响main方法中的p ,和c

举例 分为基本数据类型和引用数据类型
基本数据类型 传入的参数 相当于 你复制的一个苹果给他 test在怎么修改就不会影响你自己的苹果 ,因为你是复制了一个新的苹果给的test
而引用数据类型 传入的参数是引用 相当于你复制了一把房间的钥匙给了test test通过钥匙进入房间修改了 ,会影响你房间