Java 字符串作为对象

Java 字符串作为对象,java,string,object,Java,String,Object,据我所知,在Java中,如果给object2一个object1的值,然后更改object1或object2,另一个也会更改。但是,对于字符串(我已经了解到它们是对象?),更改一个字符串不会更改另一个字符串。下面是一个例子。更改s1不会更改s2,即使s2被指定了s1的值。有人能解释一下吗 String s1 = "Ant"; String s2 = s1; s1 = "Man"; 如果语言是Java 。。。那么s1和s2就不是“对象”。是的 s1=“人”完全更改s1引用的对象。原始对象值“Ant

据我所知,在Java中,如果给object2一个object1的值,然后更改object1或object2,另一个也会更改。但是,对于字符串(我已经了解到它们是对象?),更改一个字符串不会更改另一个字符串。下面是一个例子。更改s1不会更改s2,即使s2被指定了s1的值。有人能解释一下吗

String s1 = "Ant";
String s2 = s1;
s1 = "Man";

如果语言是Java

。。。那么s1和s2就不是“对象”。是的

s1=“人”完全更改s1引用的对象。原始对象值“Ant”不再可供您的程序访问,并自动可用于垃圾收集

本文进一步解释:


这是什么语言?如果语言是Java,那么s1和s2不是“对象”。它们是对象引用
s1=“Man;
完全更改s1引用的对象。原始对象“Ant”自动变为可用于垃圾收集。Java,Foggy,你说的对象引用是什么意思?”并更改其中一个对象" ... 在你的第二个例子中,你是在哪里做到的?您只是重新分配变量
s1
而已。那么java中所有可能的字符串都已经是预设对象了吗?如果您说s1=“Man”,那么它只是将s1指向已经存在的对象内存位置?在java中,字符串是“不可变的”:当您声明
string s1=“Ant”,在堆上创建“Ant”。它可以共享,但值本身不能更改。看这里:。是的,(比如示例中的“Ant”和“Man”)是在编译时创建的,并保存在binary.class文件中。但通常可以动态创建“字符串”(就像任何其他变量类型一样)。重要的是:“s1”不是“对象”本身。它只是指“对象”。