java - 是否可以更改数组中的变量值

标签 java arrays gwt variables immutability

这个问题对我来说有点令人困惑,但我会尽力而为。

所以:

ArrayList<Object> fieldList = new ArrayList<Object>(); 

然后我将许多不同的变量转储到该数组中:

fieldList.add(objectsURL);   //string 

 fieldList.add(X);  //int 

 fieldList.add(Y); //int 

 ... 

如果我更改变量,数组中的值就会更改 太确认数组存储了对内存的引用,而不是 然后重视自己。

但是,如果我随后从数组中检索数据然后设置...

Object object = ((String)this.fieldList.get(0)); 

然后设置对象

object = "meeep!" 

objectsURL 未设置为“meep!”而是保留了原来的样子 值(value)。

我认为这是因为“对象”没有引用原始对象 不再是变量,而是指向一个新的不可变字符串 内存中。

我认为所有预期的 Java 行为......但是,我该怎么办 设置实际的原始变量?这在java中可能吗?

所以,换句话说。仅允许访问“fieldList”才可以更改 “objectURL”?

所以,如果:

String objectsURL = "www.google.com"
fieldList.add(objectsURL); 

有没有办法仅使用 fieldList 中的引用将objectsURL 设置为“www.stackoverflow.com”? 我不想改变 fieldList 包含“objectsURL”的事实,我想更改变量“objectsURL”实际包含的字符串。

<小时/>

如果没有,是否有其他方法可以实现同样的效果?

我希望我的问题能够很好地解释问题。

我的用例正在尝试进行序列化/ 我的一堆对象的反序列化系统。我本来希望把 我可以检索所有字段以进行读取和读取 编写......从而避免必须对长列表进行硬编码 field[0]=blah 和 blah=field[0] 然后经历持续的痛苦 每次我之前添加新字段时都需要重新编号 另一个。

(我无法使用 Java 内置序列化,因为我使用的是 GWT,而且这仅是客户端。)

谢谢

最佳答案

I assume this is because the "object" is not referencing the original variable anymore, that instead its pointing to a new immutable string in the memory.

正确,每次在对象上使用赋值运算符 = 时,都会更改它引用的对象,而不是对象本身

要更改列表中的值,请使用 .set method of an ArrayList

this.fieldList.set(0, newValue);

由于您的变量是字符串,因此您无法通过列表更改字符串变量

您的替代方案:

  • 使用字符数组

    List myList = new ArrayList();
    char[] charArray = "My String".toCharArray();
    myList.add(charArray);
    charArray[0] = 'A';
    String theString = new String(myList.get(0)); // "Ay String"

如果您使用字符数组,请确保数组的长度足以包含您将来想要的字符数,因为要更改数组的长度,您需要创建一个新的数组数组(数组列表可以动态扩展,数组不能)

  • 将字符串嵌入到您自己的类中(我在这里忽略了 getter 和 setter)

    class MyString {
        public String value;
        public MyString(String value) {
            this.value = value;
        }
    }
    MyString myStr = new MyString("some value");
    list.add(myStr);
    ((MyString) list.get(0)).value = "a new value";
    System.out.println(myStr.value); // will print "a new value"

关于java - 是否可以更改数组中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595100/

相关文章:

java - 从 TreeMap 中删除元素

java - 无法确定这些测试错误的原因,调试器无法在此处运行,我也无法找出解决方法

java - 如果可能的话,是否可以在请求范围内注入(inject)bean,如果它对于线程不活跃,则注入(inject)原型(prototype)?

arrays - python中基于嵌套多个条件过滤Json数组(没有根节点名称)

c++ - 如何在给定 if 条件的情况下删除整数数组中的特定元素?

java - 自定义 ValueChangeHandler GWT

java - 为什么在比较 Java 中的整数包装器时 128==128 为假但 127==127 为真?

javascript - JSON 与 JavaScript 对象数组。为什么第二种方法的结果与第一种方法不同?以及如何实现这一目标?

Android 简单客户端应用程序将文本发送到谷歌云数据存储?例子,提示

json - GWT 客户端 JSON 解析很慢 - 如何改进?