混淆是java按引用调用和按值调用的概念
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;
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是的,你会。。。如果需要,我可以将示例更改为使用字符串