混淆是java按引用调用和按值调用的概念

混淆是java按引用调用和按值调用的概念,java,Java,Java是基于引用调用还是值调用工作的?这让我感到困惑吗 class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } public class demo { public static void tricky(Point arg1, Point arg2) { Point temp = arg1;

Java是基于引用调用还是值调用工作的?这让我感到困惑吗

class Point  {

    int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class demo {

    public static void tricky(Point arg1, Point arg2)   {
        Point temp = arg1;
        arg1 = arg2;
        arg2 = temp;
    }

    public static void tricky(Point arg1, Point arg2)  {
        arg1.x = 100;
        arg1.y = 100;
    }

    public static void main(String [] args)  {

        Point pnt1 = new Point(0,0);
        Point pnt2 = new Point(0,0);
        System.out.println("X: " + pnt1.x + " Y: " +pnt1.y);
        System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
        tricky(pnt1,pnt2);
        System.out.println("X: " + pnt1.x + " Y:" + pnt1.y);
        System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
        tricky1(pnt1,pnt2);
        System.out.println("X: " + pnt1.x + " Y:" + pnt1.y);
        System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
    }
}  

在第一个方法(棘手)被执行之后,我感到困惑,我得到了预期的结果,但在第二个方法(棘手)之后就没有了

它是按值传递的。此代码:

public static void main(final String... args)
{
    String s = "foo";
    tryAndModify(s);
    System.out.println(s);
}

private static void tryAndModify(String s)
{
    s = "bar";
}
将打印
foo


s
是对
字符串
对象的引用,当然。但这是作为方法调用参数的值。例如,C++之类的“通过引用”是一个很不同的概念。例如,

你困惑什么?你期待什么?输出是什么?Java按值传递。但是你传递的不是对象,Java总是按值传递;这段代码甚至不会编译,因为有两个方法定义为使用相同的signature@user902383是的,你会。。。如果需要,我可以将示例更改为使用
字符串