变量、对象和引用之间到底有什么区别?
例如:它们都指向某种类型,并且它们都必须保存值(当然,除非您有临时的可null类型),但是它们的功能和实现之间有何不同?
例子:
Dog myDog = new Dog(); //variable myDog that holds a reference to object Dog
int x = 12; //variable x that hold a value of 12
它们有相同的概念,但又有什么不同呢?
你可以把它想象成回答问题。
一个物体是什么<它就像世界上的任何物理事物一样,是一种自身可识别的“事物”,具有区别于其他“事物”的重要属性。就像你知道的狗之所以是狗,是因为它会吠叫,如果你扔球的话,它会移动尾巴去追球变量是<就像你看着自己的手。每一只手本身就是一只手。他们有手指、指甲和皮肤内的骨头,但你知道一个是你的左手,另一个是右手。也就是说,你可以拥有两个相同类型/种类的“东西”,但每一个都可能以自己的方式不同,可能有不同的价值。
参考文献是一个<如果你看一条街上的两栋房子,虽然它们有自己的正面,但你可以通过它们唯一的地址到达每一栋,也就是说,如果你离得很远,比如三个街区远,或者在另一个国家,你可以说出房子的地址,因为它们仍然在你离开的地方,即使你不能直接指出它们。
为了编程起见,现在用C语言编写示例
class Person{...}
Person Ana = new Person(); //An object is an instance of a class(normally)
也就是说,安娜是一个人,但她有独特的属性,使她区别于其他人。
&Ana //This is a reference to Ana, that is to say, a "where" does the variable
//"Ana" is stored, wether or not you know it's value(s)
Ana
本身是存储名为“Ana”的人的属性的变量
在解释这些概念时,我经常使用以下类比。
想象一个物体是一个气球。变量是一个人。每个人要么在价值型团队,要么在参考型团队。他们都按照以下规则玩了一个小游戏:
值类型的规则:
引用类型的规则:
(为了清楚起见,我在这里给出的解释是特定于Java和C#的。不要假设它适用于其他语言,尽管其中一些可能适用。)
我喜欢打个比方,告诉别人我住在哪里。我可以把我的地址写在一张纸上:
这有用吗?
值类型和引用类型之间的区别在于写在纸上的内容。例如,这里:
int x = 12;
就像一张纸上直接写着数字12。鉴于:
Dog myDog = new Dog();
不写狗对象本身的内容在一张纸上-它创建一个新的狗
,然后写一个引用狗在那张纸上。
非类比术语:
我遵循了www.patrickvideos.com的java SE教程,在关于“类”的章节中遇到了一个问题 他明确地说,。然而,如果我没有弄错的话,变量本身不能是对象,而只能包含对对象或类实例的引用。那么,
问题内容: 我的Java书解释说,要使用对象,我们可以将它们分配给引用变量。这与指向对象的指针有何不同?Java有指针吗? 谢谢 :) 问题答案: 引用有点像指针,您不能对其进行算术……尽管它更不透明。尽管基础位 可能 是虚拟内存中的地址,但不一定必须如此。它们只是获取对象(或表示null值)的一种方式。因此,尽管它们并不完全相同,但如果您习惯于将指针视为“一种识别对象或导航至该对象的方式”(在某
问题内容: 我是JSON和JavaScript对象的新手。 有人可以解释JSON和JavaScript对象之间的区别吗? 它们有什么用? 这个比那个好吗?还是取决于情况? 什么时候使用哪个,在什么情况下? 为什么首先创建JSON?它的主要目的是什么? 有人可以举例说明何时应该使用JSON而不是JavaScript对象,反之亦然吗? 问题答案: 首先,您应该知道什么是JSON: 它是与 语言无关的
问题内容: 斯威夫特有: 强引用 参考文献薄弱 无人参考 无主引用与弱引用有何不同? 什么时候可以使用无主引用安全? 无主引用是否像C / C ++中的悬空指针一样具有安全风险? 问题答案: 双方并引用不创建一个被引用的对象上保持(又名它们不会取消分配引用的对象增加,为了保留计数,以防止电弧)。 但是为什么要两个关键词呢?这种区别与类型内置在Swift语言中这一事实有关。长话短说:可选类型提供了内
问题内容: 后者是否仅引用由自定义构造函数创建的非原始函数对象(例如,var bird1 = new Bird();)? 问题答案: 这两个术语在ECMAScript规范中定义: 本机对象 ECMAScript实现中的对象,其语义由此规范而不是由主机环境完全定义。 注:本规范中定义了标准本机对象。一些本地对象是内置的。其他的可以在执行ECMAScript程序的过程中构造。 宿主对象 主机环境提供的
问题内容: 我对重排和重绘之间的区别还不清楚(如果有任何区别) 似乎重排可能正在转移各种DOM元素的位置,其中重画只是呈现一个新对象。例如,在移除元素时将发生回流,而在更改其颜色时将发生重新绘制。 这是真的? 问题答案: 至于定义,从那篇文章: 一个 重绘 更改时的元素皮肤改变明显制成,但不影响其布局发生。 这方面的例子包括 ,,,或。根据Opera的说法,重绘是昂贵的,因为浏览器必须验证DOM树