问题
下面的代码显示,当影响一个数组到另一个数组时,这两个数组变得相互依赖。
int tab [] = {1,2,3};
int tab2 [] = tab;
tab2[0] = 5;
System.out.print(tab[0]); // 5
我想知道为什么这与类型字符串
不同,因为如果我们有以下内容:
String ch1 = "hello";
String ch2 = ch1;
ch2 = "hi";
System.out.print(ch1); // hello
两个变量ch1
和ch2
引用的是同一个字符串,所以更改一个会影响另一个。
您没有改变String
本身,您只是为ch2
引用设置了另一个值,所以它引用了一个新的String
对象,ch1
仍然引用旧的String
对象。
要使数组代码类似于字符串代码,需要对其进行一些更改
int tab [] = {1,2,3};
int tab2 [] = tab;
tab2 = new int[]{5,6,7};
System.out.print(tab[0]); // 1
当你使用
int tab2 [] = tab;
然后,tab2
是对同一数组的引用。更改tab2[0]
的值意味着更改tab
和tab2
都指向的数据结构内的值。
使用
ch2 = "hi";
创建String
的新实例,它不会更改ch2
之前引用的对象。
像这样想。
数组和字符串都基于地址进行操作。
当你说arr1=arr2
时,说明arr1
将指向与arr2
相同的地址位置。
对于字符串,“XYZ”也是一个字符串,其中包含一个地址位置。当你说str1=str2
时,str1
将指向与str2
相同的地址。但是当你说str1=“XYZ”
时,“XYZ”是另一个存储在不同地址的对象。因此,str1将被重新分配到新地址。
即使使用数组,如果你说arr1=arr3
,arr2
也不会改变arr1
将被转发到由arr3
指向的新地址。但是当你说arr1[0]
时,你实际上是在试图更改存储在location中的值,因此它也会影响arr2
或arr3
,这取决于哪个赋值是最新的。
我写了一个函数: 我想的是用一个“cur”来记录这两个链表“a”和“b”中的每个节点。然后这两个链表'a'和'b'移动到它的下一个节点。然后转到下一个WHILE循环。 然而,这是错误的。当我调试时,在这个第一个WHILE循环中,当它完成这个
问题内容: 我试图了解变量如何在python中工作。说我有一个对象存储在变量中: 如果我分配给,则它们都指向同一个对象: 但是,如果我重新分配或,那就不再正确了: 这两个变量现在具有不同的值: 我不明白为什么变量现在不同。为什么不再是真的?有人可以解释发生了什么吗? 问题答案: Python具有引用 对象的 名称 。对象与名称分开存在,名称与它们引用的对象分开存在。 __ 在为“名称分配名称”时,
在实践中考虑java并发的片段 同一本书的摘录- 考虑易失性变量的一个好方法是想象它们的行为大致类似于上面清单中的同步整数类,用调用get和set来替换易失性变量的读写。然而,访问易失性变量不执行锁定,因此不会导致执行线程阻塞,这使得易失性变量成为比同步更轻量级的同步机制。 线程限制的一种特殊情况适用于可变变量。对共享的易失性变量执行读-修改-写操作是安全的,只要确保该易失性变量仅从单个线程写入。
我正试着用铁锈的雪球词干分析器板条箱来词干。这应该很简单,但借用检查器一直拒绝我的代码: 借用检查器说我在
问题内容: 这是我学习python的第二天(我了解C ++和一些OOP的基础知识),并且我对python中的变量有些困惑。 这是我目前对它们的了解: Python变量是对对象(可变或不可变)的引用(或指针?)。当我们有类似的内容时,不可变对象将在内存中的某个位置创建,而名称- 对象引用对将在某个命名空间中创建。当我们拥有时,不会复制任何内容,但是现在两个变量都引用相同的对象,并被添加到相同的名称空
问题内容: 我总是理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我预期的不同。 输出: 柜台:1 测试:0 由于引用我认为,当我增加那么将自动以及递增。但是,似乎是从某处引用,问题是在哪里? 问题答案: 由于引用 这个假设是错误的。在Java中,您不能引用变量。变量中存储的是一个值。该值可以是原始类型值或引用类型值。对于基元,值是基元的值。对于引用类型, 引用值(通常只是引用)是指