Java中的字符串表示

String在Java中表示为对象。 因此,对象包含存储在对象内的实例变量中的值。 对象还包含对对象进行操作的代码体。 这些代码体称为方法


包含相同类型的值和相同方法的对象组合在一起。 可以将类视为这些对象的类型定义。 因此,Java中的String如何表示? 让我们考虑Java中的以下代码片段。

final public class Main { public static void main(String[] args) { String s="black lion"; String s1=new String(s); System.out.println(s.toUpperCase()); System.out.println("black lion".toUpperCase()); System.out.println(s1.toUpperCase()); } } 

上面的代码在将其转换为大写后显示String。 在这句话中, String s="black lion"; ,分配的字符串在哪里。 它被分配到String类或某个地方的实例变量中吗? 并在此声明中"black lion".toUpperCase(); 。 它是String类的对象吗? 怎么样?

字符串是包含一系列UTF-16代码单元的char[] ,该数组的int偏移量和int长度。

我认为你混淆的根源是这个想法

 String s 

创建一个分配到的字符串。

它不是。 它为字符串引用创建空间。 分配副本引用,但不修改这些引用引用的对象。

你也应该意识到这一点

 new String(s) 

并没有真正做任何有用的事情。 它只创建另一个由s ,相同的数组,偏移量和长度支持的实例。 很少有理由这样做,因此大多数Java程序员认为这是不好的做法。

"my string"这样的Java双引号字符串实际上是对实例化String实例的引用,因此"foo"是对同一String实例的引用,无论它在代码中显示多少次。

字符串在Java中是不可变的,因此当您执行printlntoUpperCase会创建一个新的String (以后会收集垃圾)。

如果我得到你想知道的东西。 String对象由双引号" 。这称为字符串文字。