首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java引用类型

Java引用类型
EN

Stack Overflow用户
提问于 2010-04-21 03:20:12
回答 2查看 3.1K关注 0票数 3

Java如何处理传递引用数据类型参数??谁能给我一张清晰的图片?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 03:21:26

Java会将引用的副本传递给该方法。引用仍然指向相同的实例。

想象一下,如果我有一张纸,上面有一家餐馆的地址。你也想去同一家餐馆,所以我拿了一张新的纸条,把餐馆的地址复制到那张纸上,然后给你。两张纸条都指向同一家餐厅,但它们是对实例的不同引用。

餐馆本身不是重复的,只是对它的引用是重复的。

Jon Skeet provides a similar analogy

气球类比

我把每个物体想象成一个氢气球,把每个引用想象成一根弦,把每个变量想象成能抓住一根弦的东西。如果引用是空引用,就像有一段字符串,但末尾没有任何东西。如果它是对一个真实物体的引用,那么它就是绑在气球上的一根线,代表那个物体。当一个引用被复制时(无论是为了变量赋值还是作为方法调用的一部分),就好像创建了另一段字符串,附加到第一段字符串所附加到的任何位置。变量(如果有的话)持有的实际字符串不会去任何地方-它只是被复制。

下面是一个示例:

代码语言:javascript
复制
// Here I have one instance and one reference pointing to it
Object o = new Object();
// At this moment a copy of "o" is made and passed to "foo"
foo(o);

void foo(Object obj) {
    // In here I have obj which is a copy of whatever
    // reference was passed to me
}
票数 10
EN

Stack Overflow用户

发布于 2010-04-21 03:21:45

所有Java对象(除了intfloatboolean等原语之外的所有对象)是指向对象的引用。

举个例子:

代码语言:javascript
复制
Foo f = new Foo();

上面,f是对Foo类型的对象的引用。如果你有一个函数:

代码语言:javascript
复制
void doSomething(Foo myFoo) { ... }

doSomething(f);

doSomething()函数接收f引用的相同对象。因此,如果doSomething()改变了f,它就会改变该对象。

与C++不同,在通过值传递、引用或使用指针之间没有选择:所有类类型的变量都是引用(或指针,具体取决于您的术语)。

这里的一个问题是,人们经常试图将他们的C++知识和术语应用于Java,这是行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2677979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档