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

Java a=a.trim()和a.trim()之间有什么区别?,java,string,java-7,jdk1.4,Java,String,Java 7,Jdk1.4,我有点困惑 我知道String对象是不可变的。这意味着如果我从String类调用一个方法,比如replace(),则字符串的原始内容不会改变。相反,将基于原始字符串返回一个新字符串。但是,可以为同一变量指定新值 基于这个理论,我总是写a=a.trim(),其中a是字符串一切都很好,直到我的老师告诉我,a.trim()也可以使用。这打乱了我的理论 我和老师一起测试了我的理论。我使用了以下代码: String a = " example "; System.out.println(a);

我有点困惑

知道
String
对象是不可变的。这意味着如果我从
String
类调用一个方法,比如
replace()
,则
字符串的原始内容不会改变。相反,将基于原始字符串返回一个新字符串。但是,可以为同一变量指定新值

基于这个理论,我总是写
a=a.trim()
,其中
a
字符串一切都很好,直到我的老师告诉我,
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的早期版本


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

字符串在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老师。这完全是一个没有证据的错误陈述。

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

a = a.trim()

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

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

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"

也许她的意思是
System.out.println(a.trim())
。这将打印修剪过的字符串,但不会更改实际字符串
a
;就我所见,
trim()
没有任何区别。你自己看看:和。好吧,我们学校使用jdk1.4显然没有jdk1.7的对手!;)。。。Sun/Oracle在5年前就停止支持1.4。更不用说你错过了从那以后介绍的很多好东西。你能让你的老师用
a.trim()
编写一个例子吗?也许是像AJ建议的那样有误会。嗯,这是我指出的,但我的老师不会接受。(请阅读最后一段)。有趣的@Sanjay T.Sharma,这正是我们学生的想法!;)老师可能是错的。有时候是主观的,你只能耸耸肩,怀疑他们是否真的是对的。在这种幸运的情况下,老师显然是客观错误的。字符串是不可变的。@yshavit让我想起了我的一位老师曾经说过,如果你溢出了一个int,Java会抛出一个异常(那个家伙当时在教C,但他以前教过Java)Thnx@sᴜʀᴇsʜᴀᴛᴛᴀ 支持我的观点是正确的。好吧,我会确保我总是写“a=a.trim()”,因为我找不到新老师不介意,但这个答案与@s的答案类似ᴜʀᴇsʜᴀᴛᴛᴀ. Thnx NE路!:)这里解释代码的最好方法是添加注释。我只是那样做了。