String str = new String("Hello World")会在堆里创建几个对象
时间: 2024-02-12 21:44:37 浏览: 79
这行代码会在堆内存中创建两个对象:一个是字符串常量池中的 "Hello World" 字符串对象,另一个是在堆中通过 new 操作符创建的字符串对象。其中字符串常量池是在 JVM 启动时就被创建的一块内存,用于存储字符串常量,而通过 new 操作符创建的字符串对象则是在程序运行时动态分配的。因此,这段代码在堆中总共创建了两个对象。
相关问题
.String str = new String("hello word"); 请使用反射调用toString() 方法
可以使用以下代码来使用反射调用toString()方法:
```
try {
String str = new String("hello world");
Method toStringMethod = str.getClass().getMethod("toString");
String strToString = (String) toStringMethod.invoke(str);
System.out.println(strToString);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
```
这段代码首先获取了字符串对象的Class对象,然后利用该对象的getMethod()方法获取了toString()方法的Method对象。接着,利用Method对象的invoke()方法调用了toString()方法,并将返回值强制转换为String类型。最后,打印输出了toString()方法的返回值。
String不可变,如何解释String str = "Hello"; str = str + " World"; System.out.println("str=" + str);这段代码
这段代码中,首先创建了一个String对象"Hello"并将其赋值给变量str。然后通过在变量str后面使用+运算符连接了另一个字符串" World",这个操作会创建一个新的String对象,它包含了连接后的字符串"Hello World"。最后将这个新的对象又赋值给了变量str。所以,虽然String对象本身不可变,但是通过重新赋值变量来改变字符串对象的值是可行的。最终,打印出的结果是"str=Hello World"。
阅读全文