String trim的小问题,在线等
下列代码的运行结果是(“_”表示空白):
public class Base{
private void test() {
String aStr = "_One_";
String bStr = aStr;
bStr =aStr.trim();
System.out.println("[" + aStr + "," + bStr + "]");
}
public static void main(String[] a) {
new Base().test();
}
}
A.[One,_One_]
B.[_One_,One]
C.[One,One]
D.[_One_,_One_]
正确答案:B
问,为什么会是B呢,thanks
[解决办法]
不是B是什么???
[解决办法]
public class Base{
private void test() {
String aStr = "_One_";
String bStr = aStr;
bStr =aStr.trim(); //aStr.trim()得到 One,但是没有改变aStr,只是把结果返回给bStr,aStr.trim() 在 字符串常量池中增加了 One这个字符串常量 ,bStr = aStr.trim(),即让bStr指向常量池中的One,而aStr还是指向常量池的_One_,没有改变
System.out.println("[" + aStr + "," + bStr + "]");
}
public static void main(String[] a) {
new Base().test();
}
}
[解决办法]
public String trim() { int len = count; int st = 0; int off = offset; /* avoid getfield opcode */ char[] val = value; /* avoid getfield opcode */ while ((st < len) && (val[off + st] <= ' ')) { st++; } while ((st < len) && (val[off + len - 1] <= ' ')) { len--; } return ((st > 0) || (len < count)) ? substring(st, len) : this; }
[解决办法]
aStr依然是aStr:"_one_";
bStr被重新赋值为aStr.trim(),就是去掉了"_one_"(aStr)的所有空格,所以bStr的值为"one";
结果为:"_one_,one"
[解决办法]
关键词:String 是不可变的字符串~~~
[解决办法]
题目中"下列代码的运行结果是(“_”表示空白):
“_”表示的是空白
String bStr = aStr;
bStr =aStr.trim();
String的trim方法:
[JAVA api] 返回字符串的副本,忽略前导空白和尾部空白。
若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的新 String 对象。
所以最终:System.out.println("[" + aStr + "," + bStr + "]");执行结果为[ One ,One]
将空格变为"_"就选择B。 B.[_One_,One]
[解决办法]
[解决办法]
String aStr = "_One_"; -------1
String bStr = aStr;-------------2
bStr =aStr.trim();执行这句,返回一个String类型的对象。也就是bStr引用指向的新对象。
2就作废了。
[解决办法]
public class Base{
private void test() {
String aStr = "_One_";
String bStr = aStr; //bStr的值为:_One_
bStr =aStr.trim(); // 虽然aStr.trim()但是并没有改变aStr内存中的值,而是将值赋给内存变量bStr,因此,bStr值为“One”。比如,int a;int b; a=a+b;一样。
System.out.println("[" + aStr + "," + bStr + "]");
}
public static void main(String[] a) {
new Base().test();
}
}
[解决办法]
B啊,trim()方法是返回一个新的字符串对象,新的字符串对象相对于原来的字符串对象是去了开始和结束的空格