Java 变量类型

Java教程 - Java变量类型


Java对象引用变量

对象引用变量在分配发生时以不同的方式工作。

例如,

Box b1 = new Box(); 
Box b2 = b1; 

该片段执行后, b1 b2 将指向相同的对象。

b1到b2的赋值没有分配任何内存或复制任何部分原始对象。 它简单地使b2指向与b1相同的对象。因此,通过b2对对象所做的任何更改将影响b1所引用的对象。

对b1的后续赋值将简单地从原始对象中解除b1而不影响对象或影响b2。

例如:

Box b1 = new Box(); 
Box b2 = b1; 
// ... 
b1 = null; 

这里,b1已设置为null,但b2仍指向原始对象。

Java对象引用变量

 
class Box {
  int width;
  int height;
  int depth;
}

public class Main {
  public static void main(String args[]) {
    Box myBox1 = new Box();
    Box myBox2 = myBox1;

    myBox1.width = 10;

    myBox2.width = 20;

    System.out.println("myBox1.width:" + myBox1.width);
    System.out.println("myBox2.width:" + myBox2.width);
  }
}

上面的代码生成以下结果。


Java方法参数传递

当一个参数传递给一个方法时,它可以通过值或引用传递。Pass-by-Value将参数的值复制到参数中。对参数所做的更改对参数没有影响。按引用传递参数传递对参数的引用。对参数所做的更改将影响参数。

当一个简单的基本类型传递给一个方法时,它是通过使用call-by-value来完成的。 对象通过使用调用引用传递。

以下程序使用“传递值"。

 
class Test {
  void change(int i, int j) {
    i *= 2;
    j /= 2;
  }
}
public class Main {
  public static void main(String args[]) {
    Test ob = new Test();

    int a = 5, b = 20;

    System.out.println("a and b before call: " + a + " " + b);

    ob.change(a, b);

    System.out.println("a and b after call: " + a + " " + b);
  }
}

此程序的输出如下所示:


例子

在以下程序中,对象通过引用传递。

 
class Test {
  int a, b;
  Test(int i, int j) {
    a = i;
    b = j;
  }
  void meth(Test o) {
    o.a *= 2;
    o.b /= 2;
  }
}
public class Main {
  public static void main(String args[]) {
    Test ob = new Test(15, 20);

    System.out.println("ob.a and ob.b before call: " + ob.a + " " + ob.b);

    ob.meth(ob);

    System.out.println("ob.a and ob.b after call: " + ob.a + " " + ob.b);
  }
}

此程序生成以下输出: