【问题标题】:What is difference between a class variable and class instance?类变量和类实例有什么区别?
【发布时间】:2017-05-13 09:54:53
【问题描述】:

例如,我有一个 Car 类,我有两个对象 BMW 和 Benz 类 Car。因此,为了实例化,我们必须声明一个新变量,例如;

Car BMW = new Car();

现在如果对象被声明为

Car Benz;

如果第一个通过引用传递,第二个通过值传递,任何人都可以通过实例化对象来帮助我进行交换吗?

【问题讨论】:

  • 按值传递和按引用传递是指将参数传递给函数/方法-您没有提及任何内容-请澄清您的问题。我们可能会猜测您想要创建一个交换两个变量的方法,但最好告诉我们您想要完成什么。此外 - Java 仅支持传递值。
  • 您必须了解 变量 和 对象 之间的区别 - 您在写作时就好像它们是同一个东西。变量引用一个对象,它本身不是对象。 Car Benz; 只是声明了一个变量,没有初始化它,不涉及任何对象。
  • @nos 这很好,但我已经做了一个实验。在提到的代码中,请添加System.out.println(aDog);,它实际上给出了一个十六进制数字,指的是寄存器中的地址。这意味着 aDog 实际上是指一个内存位置。我是 java 初学者,实际上我经历了 o'reilly 编写的 java 编程,它说默认情况下,jave 将参数处理为通过引用传递。
  • 而我的目的是了解上述两个声明之间的区别。当然,我从来没有注意到 java 中的这种交换,因为我相信 java 中的所有内容都是通过引用传递的。所以我也要求程序节省空间和时间。它确实与实际问题没有任何联系。我只是想知道上述声明之间的区别。
  • 两个声明的区别在于第二个没有初始化Benz。如果您尝试测试您遇到编译时错误或Benz 将是null(取决于您如何执行此操作)。也不是 pass-by-anything,因为您没有向方法 pass 传递任何东西,而且 Java 不具备 pass-by-reference 和 pass-by -值。

标签: java oop object reference swap


【解决方案1】:
public class A{
    int count = 1;
}

public class Main{

public static void main(String[] args) {

    A a = new A();
    A b = new A();
    b.count = 2;

    System.out.println("Before swap");

    System.out.println("A count : "+a.count);
    System.out.println("B count : "+b.count);

    A c = b;
    b = a;
    a = c;

    System.out.println("Before swap");

    System.out.println("A count : "+a.count);
    System.out.println("B count : "+b.count);


}

}

【讨论】:

  • 你没明白我的意思。你可以在 main 函数中交换任何类似的东西。但我希望你通过调用一个函数来交换,像函数swap(a,b); 这样的函数实际上应该将a 设为b,将b 设为a。如果你检查 C 和 C++ 中的指针,你会更清楚。
  • @shiva 为什么?在任何情况下,如果您修改函数的参数,调用函数将不会看到该更改;参数值是该函数的本地值。如果这些参数是引用,并且您更改了在被引用对象中的某些内容,则该更改将反映在调用函数中。
  • @Dave 感谢您为极客提供极客代码。实际上我的意思是那个程序本身。假设在上面给出的代码中,您确实将其输入为 'Car c1 = null;汽车 c2 = null;'并附加属性将同样有效。如果它有效,则意味着 java 默认通过引用函数参数来传递。我在两种方式初始化时观察到的一个区别是构造函数不适用于后一种初始化。
猜你喜欢
  • 1970-01-01
  • 2012-12-17
  • 2012-06-23
  • 2012-02-08
  • 1970-01-01
  • 2015-09-10
  • 2010-10-23
相关资源
最近更新 更多