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

Hun*_*Dev 6 java string jdk1.4 java-7

我遇到了一点混乱.

知道那个String对象是不可变的.这意味着如果我从String类中调用一个方法,replace()那么原始内容String就不会改变.而是基于原始返回new String.但是,可以为同一变量分配新值.

基于这个理论,我总是写a = a.trim()在那里a是一个String.一切都很好,直到我的老师告诉我,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);
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

    example   
    example   
example
Run Code Online (Sandbox Code Playgroud)

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

这是因为我使用的是较新版本的Java(jdk1.7)并且a.trim() 在以前版本的Java中工作.

请告诉我谁有正确的理论,因为我完全不知道!

Sur*_*tta 9

字符串在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
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

  • 老师可能是错的.有时这是关于主观的事情,你只需要耸耸肩,想知道他们是否真的是对的.在这样的幸运案例中,老师显然是客观错误的.字符串一直是不可变的[从一开始](http://web.mit.edu/java_v1.0.2/www/javadoc/java.lang.String.html#_top_). (2认同)
  • @yshavit让我想起我的老师声称如果你溢出一个int,Java就会抛出异常的时候了.(那个人当时正在教授C,但他之前曾教过Java) (2认同)