Question

I've ran into a bit of a confusion.

I know that String objects are immutable. This means that if I call a method from the String class, like replace() then the original contents of the String are not altered. Instead, a new String is returned based on the original. However the same variable can be assigned new values.

Based on this theory, I always write a = a.trim() where a is a String. Everything was fine until my teacher told me that simply a.trim() can also be used. This messed up my theory.

I tested my theory along with my teacher's. I used the following code:

String a = "    example   ";
System.out.println(a);
a.trim();      //my teacher's code.
System.out.println(a);
a = "    example   ";
a = a.trim();  //my code.
System.out.println(a);

I got the following output:

    example   
    example   
example

When I pointed it out to my teacher, she said,

it's because I'm using a newer version of Java (jdk1.7) and a.trim() works in the previous versions of Java.

Please tell me who has the correct theory, because I've absolutely no idea!

Was it helpful?

Solution

String is immutable in java. And trim() returns a new string so you have to get it back by assigning it.

    String a = "    example   ";
    System.out.println(a);
    a.trim();      // String trimmed.
    System.out.println(a);// still old string as it is declared.
    a = "    example   ";
    a = a.trim();  //got the returned string, now a is new String returned ny trim()
    System.out.println(a);// new string

Edit:

she said that it's because I'm using a newer version of java (jdk1.7) and a.trim() works in the previous versions of java.

Please find a new java teacher. That's completely a false statement with no evidence.

OTHER TIPS

Simply using "a.trim()" might trim it in memory (or a smart compiler will toss the expression entirely), but the result isn't stored unless you precede with assigning it to a variable like your "a=a.trim();"

String are immutable and any change to it will create a new string. You need to use the assignment in case you want to update the reference with the string returned from trim method. So this should be used:

a = a.trim()

You have to store string value in same or different variable if you want some operation (e.g trim)on string.

String a = "    example   ";
System.out.println(a);
a.trim();      //output new String is not stored in any variable
System.out.println(a); //This is not trimmed
a = "    example   ";
a = a.trim();  //output new String is  stored in a variable
System.out.println(a); //As trimmed value stored in same a variable it will print "example"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top