This is a little confusing question for me to express, but I’ll do my best.
So:
ArrayList<Object> fieldList = new ArrayList<Object>();
I then dump a lot of different variables to this array:
fieldList.add(objectsURL); //string
fieldList.add(X); //int
fieldList.add(Y); //int
...
If I change the variable, the values in the array change
too-confirming the array stores a reference to the memory, rather
then value itself.
However, if I then retrieve data from the array then set that…
Object object = ((String)this.fieldList.get(0));
Then set object
object = "meeep!"
objectsURL is not set to “meep!” but rather it retains its original
value.
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.
All expected Java behavior I think….but then, how would I go about
setting the actual original variable? is this possible in java?.
So, in other words. Given only access to “fieldList” is it possible to change the value of
“objectsURL”?
So, if:
String objectsURL = "www.google.com"
fieldList.add(objectsURL);
Is there a way to set objectsURL to “www.stackoverflow.com” using only a reference from fieldList?
I dont want to change the fact that fieldList contains “objectsURL”, I want to change what string the variable “objectsURL” actualy contains.
If not, is there an alternative method to achieve the same thing?
I hope my question explains the problem well enough.
My use-case is trying to make a serialization/
deserialization system for a bunch of my objects. I was hoping to put
all the fields into a arraylist I could retrieve for both reading and
writing….thus avoiding having to hard-code long lists of
field[0]=blah and blah=field[0] and then going though constant pains
of needing to renumber them each time I add a new field before
another.
(I cant use Javas inbuilt serialization, as I am using GWT and this is client side only.)
Thanks,
Correct, each time you use the assignment operator
=on an object you change the object it refers to, not the object itself.To change the values in the List, you use the .set method of an ArrayList
this.fieldList.set(0, newValue);Since your variable is a String, there is no way you can change the String-variable through the list
Your alternatives:
using a char-array
If you use a char-array, make sure that the length of the array is enough to contain the number of characters you want to have in the future, because to change the length of the array you will need to create a new array (array lists can be expanded dynamically, arrays can not)
Embed the String inside your own class (I have ignored getters and setters here)