Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用字符串方法时创建的对象_Java_String_Object - Fatal编程技术网

在java中使用字符串方法时创建的对象

在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

此示例的输出为:Sachin


那么已经创建了多少个对象

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
    时可以创建对象:在
    System.out
    PrintWriter及其包装的流堆栈内部
  • 每个字符串对象内部可能(也可能不)有一个不同的
    char[]
    对象
  • s
    上的操作可能会被优化掉,因为它们实际上对程序的输出没有影响(!!)
  • 调用应用程序时,将向其传递一个字符串[]参数,可能会填充多个字符串,并且(最后)
  • JVM引导和类加载期间将创建任意数量的对象。。。在应用程序启动之前
因此,根据你计算的对象、计算方法以及你所做的其他假设,答案可能是从零到大量对象的某个数字

注意:这项测试的正常答案是“创建了2个字符串”,但正如您所看到的,答案要复杂得多


注2:
concat
toLowerCase
方法不会在字符串池中创建字符串。实际上,将字符串放入池中的唯一字符串操作是
intern
。(通过实验或阅读Java类库源代码,很容易验证这一点。)

每个返回修改字符串的字符串方法都会创建至少一个新对象。。。真的吗?Java字符串是不可变的。所以它应该打印Sachin而不是Java。您的程序中创建了3个字符串对象,因此它只创建了一个对象,对吗?@Ramanlfc让我们不要忘记,文本
“Tendulkar”
本身就是一个对象:P.@AvinashJadhav正如Tom提醒我的那样,您实际上有4个字符串对象,每个字符串对象实际上可以包含2个单独的对象;i、 e.每个字符串都有一个内部
char[]
。还有一个问题是什么时候创建对象。。。
 s.concat(" Tendulkar"); 
 s.toLowerCase();