首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java -字符串和数组引用

java -字符串和数组引用
EN

Stack Overflow用户
提问于 2014-10-26 23:44:40
回答 2查看 54关注 0票数 0

请帮我理解一下。如果它们都通过传递引用来工作,那么输出不应该是相同的吗?抱歉,如果这是个愚蠢的问题。

代码语言:javascript
复制
String A="john";
String B=A;
A="mary";
System.out.println(B);

int[] a=new int[]{5};
int[] b=a;
a[0]=6;
System.out.println(b[0]);

a=john          a=5

b=a               b=a

a=mary         a=6

印刷b

 /T1356-1991商用专用机比较比较

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 23:50:55

首先,“引用传递”是指将参数传递给方法。这不是正确的术语。

非原始变量存储对对象的引用。

设置A="john"时,可以创建一个字符串"john",变量A引用该字符串。

当您设置B=A时,您将B设置为引用A在那个时间点也引用的同一个对象。

当您设置A="mary"时,您将创建一个新的字符串"mary",变量A现在将引用该字符串。但这对"john“字符串没有任何影响,该字符串仍然存在,B引用。

它与原语完全相同:

代码语言:javascript
复制
int x = 10;
int y = x;  // y now holds the value, 10
x = 11;     // x now holds the value, 11, but y is still 10.

对字符串"john“或"mary”的引用是变量的值。值不是字符串本身,而是对现有string对象的引用(实际上,它是一个内存位置)。

请注意,Java的一个方便的特性可能使这一点在字符串中不那么明显;在Java中,String str = "john";本质上是用于:

代码语言:javascript
复制
 char data[] = {'j', 'o', 'h', 'n'};
 String str = new String(data);

这是明确的这里文档。

你可能真的只想看经典的宾基的指针有趣的视频,Java版本

票数 1
EN

Stack Overflow用户

发布于 2014-10-26 23:53:17

做的时候

代码语言:javascript
复制
String B=A

您正在将引用从A复制到B,因此它们并不指向内存中的相同位置。

当您将"mary“分配给A时,您将变量A的引用更改为内存中的一个新位置。

现在A和B指向内存中不同的位置(或不同的字符串来简化)。

更改数组中的值时,如果不更改数组的引用,则实际上正在更改数组的内容。

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

https://stackoverflow.com/questions/26579293

复制
相关文章

相似问题

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