在java中使用字符串方法时创建的对象
此示例的输出为:Sachin在java中使用字符串方法时创建的对象,java,string,object,Java,String,Object,此示例的输出为:Sachin 那么已经创建了多少个对象 java中的字符串是不可变的类型 public class StringDemo { public static void main(String [] args) { String s = "Sachin"; s.concat(" Tendulkar"); s.toLowerCase(); System.out.print(s
那么已经创建了多少个对象 java中的字符串是不可变的类型
public class StringDemo
{
public static void main(String [] args)
{
String s = "Sachin";
s.concat(" Tendulkar");
s.toLowerCase();
System.out.print(s);
}
}
这两行返回两个不同的字符串,并且不影响原始字符串。在java中,字符串被认为是不可变的,这意味着它一旦创建就不能更改,因此如果您计算有多少,在您创建新对象时,在声明第一行的第一行,您声明了一个新对象,最后,
s.toLowerCase()
创建了第三个对象,因此创建了三个字符串对象 答案是:一个不确定的数字
- 表面上看,
上的两个操作分别创建一个字符串对象s
- 加载时会创建另外两个字符串对象来表示文字
- 调用
时可以创建对象:在print
PrintWriter及其包装的流堆栈内部System.out
- 每个字符串对象内部可能(也可能不)有一个不同的
对象char[]
上的操作可能会被优化掉,因为它们实际上对程序的输出没有影响(!!)s
- 调用应用程序时,将向其传递一个字符串[]参数,可能会填充多个字符串,并且(最后)
- JVM引导和类加载期间将创建任意数量的对象。。。在应用程序启动之前
注2:
concat
和toLowerCase
方法不会在字符串池中创建字符串。实际上,将字符串放入池中的唯一字符串操作是intern
。(通过实验或阅读Java类库源代码,很容易验证这一点。)每个返回修改字符串的字符串方法都会创建至少一个新对象。。。真的吗?Java字符串是不可变的。所以它应该打印Sachin而不是Java。您的程序中创建了3个字符串对象,因此它只创建了一个对象,对吗?@Ramanlfc让我们不要忘记,文本“Tendulkar”
本身就是一个对象:P.@AvinashJadhav正如Tom提醒我的那样,您实际上有4个字符串对象,每个字符串对象实际上可以包含2个单独的对象;i、 e.每个字符串都有一个内部char[]
。还有一个问题是什么时候创建对象。。。
s.concat(" Tendulkar");
s.toLowerCase();