a = a.trim()和a.trim()之间有什么区别?

时间:2014-01-04 06:06:06

标签: java string java-7 jdk1.4

我遇到了一点混乱。

知道 String个对象不可变。这意味着如果我从String类调用方法,例如replace(),则String的原始内容不会被更改。相反,会根据原始广告返回 String。但是,可以为相同的变量分配新值。

基于这个理论,我总是写a = a.trim(),其中aString一切都很好,直到我的老师告诉我,也可以使用a.trim()。这搞砸了我的理论。

我和老师一起测试了我的理论。我使用了以下代码:

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);

我得到了以下输出:

    example   
    example   
example

当我向老师指出时,她说,

  

这是因为我使用的是较新版本的Java(jdk1.7)和a.trim()   适用于以前版本的Java。

请告诉我谁有正确的理论,因为我绝对不知道

4 个答案:

答案 0 :(得分:9)

String在java中是不可变的。并且trim()返回一个新字符串,因此您必须通过分配它来取回它。

    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

修改

  

她说这是因为我使用的是较新版本的java(jdk1.7),而a.trim()在以前版本的java中有效。

请找一位新的java老师。这完全是一个没有证据的虚假陈述。

答案 1 :(得分:2)

字符串是不可变的,对它的任何更改都将创建一个新字符串。如果要使用从trim方法返回的字符串更新引用,则需要使用该赋值。所以应该使用它:

a = a.trim()

答案 2 :(得分:2)

简单地使用“a.trim()”可能会在内存中修剪它(或者智能编译器会完全抛出表达式),但结果不会存储,除非您先将其分配给变量,如“a = a.trim();“

答案 3 :(得分:1)

如果要对字符串进行某些操作(例如修剪),则必须将字符串值存储在相同或不同的变量中。

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"