我在不可变字符串上编写了以下代码.
public class ImmutableStrings {
public static void main(String[] args) {
testmethod();
}
private static void testmethod() {
String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
a 1-->a
a 2-->ty
Run Code Online (Sandbox Code Playgroud)
这里变量的值a已经改变(许多人说不可变对象的内容不能改变).但究竟是什么意思说String是不可改变的?你能否为我澄清一下这个话题?
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
我知道C#中的"string"是一个引用类型.这是在MSDN上.但是,此代码不能正常工作:
class Test
{
public static void Main()
{
string test = "before passing";
Console.WriteLine(test);
TestI(test);
Console.WriteLine(test);
}
public static void TestI(string test)
{
test = "after passing";
}
}
Run Code Online (Sandbox Code Playgroud)
输出应该在"传递之前""传递之后",因为我将字符串作为参数传递并且它是引用类型,第二个输出语句应该识别在TestI方法中更改了文本.但是,我在"通过之前""在通过之前"得到它似乎是通过值传递而不是通过ref.我知道字符串是不可变的,但我不知道这将如何解释这里发生的事情.我错过了什么?谢谢.