我被告知java中的字符串无法更改。以下代码是什么?
name="name";
name=name.replace('a', 'i');
它不会改变name
字符串吗?
另外,replace()的实现在哪里;相比于();等于();提供?
我只是在这里使用这些功能,但它们实际上在哪里实现?
答案 0 :(得分:6)
String.replace()返回一个新的String。
“name”是对String对象的引用,因此可以将其重新分配为指向name.replace(),但它将指向一个新对象。
以下是javadoc for String,您可以在其中找到所有方法的功能。
答案 1 :(得分:1)
这是将引用变量(name)与其引用的String对象(“name”)混淆的典型案例。他们是两个非常不同的野兽。字符串永远不会更改(忽略反射类型kludges),但引用变量可以根据需要引用许多不同的字符串。你会注意到,如果你刚刚打电话
name.replace('a', 'i');
没有任何反应。如果将名称变量分配给另一个字符串,即replace
方法返回的字符串,则只能看到更改。
答案 2 :(得分:0)
试试这个并亲自看看:
String name = "name";
String r = name.replace( 'a', 'i' );
System.out.println( name );// not changed
System.out.println( r ); // new, different string
如果将新ref指定给r,则原始对象不会更改。
我希望这会有所帮助。
答案 3 :(得分:0)
如果您的代码是
name="name";
name.replace('a', 'i'); //assignment to String variable name is neglected
System.out.print(name)
输出:
name
这是因为name.replace('a','i')
会将替换后的字符串nime
放入字符串池中,但引用不会指向字符串变量名。
每当你尝试修改一个字符串对象,
java检查时,结果字符串是否在字符串池
中可用(如果可用)可用字符串的引用指向字符串变量{ {1}}否则在字符串池中创建新的字符串对象,并将创建的对象的引用指向字符串变量。