我遇到了一点混乱。
我知道 String
个对象不可变。这意味着如果我从String
类调用方法,例如replace()
,则String
的原始内容不会被更改。相反,会根据原始广告返回新 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);
我得到了以下输出:
example
example
example
当我向老师指出时,她说,
这是因为我使用的是较新版本的Java(jdk1.7)和
a.trim()
适用于以前版本的Java。
请告诉我谁有正确的理论,因为我绝对不知道!
答案 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"