gpt4 book ai didi

java - 变量、对象和引用之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 13:17:52 25 4
gpt4 key购买 nike

变量对象引用之间到底有什么区别?

例如:它们都指向某种类型,并且它们都必须保存值(当然除非您有临时可为空的类型),但它们的功能和实现到底有何不同?

示例:

Dog myDog = new Dog(); //variable myDog that holds a reference to object Dog
int x = 12; //variable x that hold a value of 12

它们具有相同的概念,但它们有何不同?

最佳答案

(需要明确的是,我在这里给出的解释是针对 Java 和 C# 的。不要假设它适用于其他语言,尽管其中的一部分可能如此。)

我喜欢用告诉某人我住在哪里的类比。我可能会把我的地址写在一张纸上:

  • 变量就像一张纸。它具有值(value),但它本身并不是值(value)。您可以划掉其中的任何内容并写一些其他内容。
  • 我写在纸上的地址就像一个引用。这不是我的房子,但它是导航到我的房子的一种方式。
  • 我的房子本身就像一个物体。我可以给出对同一对象的多个引用,但只有一个对象。

这有帮助吗?

值类型和引用类型之间的区别在于纸上写的内容。例如,这里:

int x = 12;

就像一张纸,上面直接写着数字12。鉴于:

Dog myDog = new Dog();

不会将 Dog 对象内容本身写入纸上 - 它会创建一个新的 Dog,然后在那张纸上写入对该狗的引用。

用非类比术语来说:

  • 变量代表内存中的存储位置。它有一个名称,您可以在编译时引用它,并且在执行时它有一个值,该值始终与其编译时类型兼容。 (例如,如果您有一个 Button 变量,则该值将始终是对 Button 类型的对象或某个子类的引用,或者是 null 引用。)
  • 对象是一种独立的实体。重要的是,变量或任何表达式的值都不是对象,而只是引用。一个对象实际上包括:
    • 字段(州)
    • 类型引用(在对象的生命周期内永远不会改变)
    • 监视器(用于同步)
  • 引用是用于访问对象的值 - 例如调用其方法、访问字段等。您通常使用 . 运算符导航引用。例如,如果 fooPerson 变量,则 foo.getAddress().getLength() 将采用 foo(引用)的值,并对该引用引用的对象调用 getAddress()。结果可能是一个 String 引用...然后我们对该引用引用的对象调用 getLength()

关于java - 变量、对象和引用之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com