相关疑难解决方法(0)

String Literal Pool是String对象或对象集合的引用的集合

看完SCJP Tip Line的作者Corey McGlone撰写关于javaranch网站的文章后,我感到很困惑.命名为Strings,Literally和SCJP Java 6程序员指南,由Kathy Sierra(javaranch的联合创始人)和Bert Bates撰写.

我将尝试引用Corey先生和Kathy Sierra女士引用的关于String Literal Pool的内容.

1.据Corey McGlone先生说:

  • String Literal Pool是指向String对象的引用的集合.

  • String s = "Hello"; (假设Heap上没有名为"Hello"的对象),将"Hello"在堆上创建一个String对象,并在String Literal Pool(Constant Table)中放置对该对象的引用

  • String a = new String("Bye");(假设Heap上没有名为"Bye" new的对象,操作符将强制JVM在堆上创建一个对象.

现在,"new"对于创建String及其引用的运算符的解释 在本文中有点令人困惑,所以我将文章本身的代码和解释放在下面.

public class ImmutableStrings
{
    public static void main(String[] args)
    {
        String one = "someString";
        String two = new String("someString");

        System.out.println(one.equals(two));
        System.out.println(one == two);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于关键字,我们实际上最终会遇到略微不同的行为."new." 在这种情况下,对两个String文字的引用仍然放在常量表(String Literal Pool)中,但是当你来到关键字时"new,"JVM必须在运行时创建一个新的String对象,而不是使用常量表中的那个.

这是解释它的图表..

在此输入图像描述

那么它是否意味着,String Literal Pool也有对这个Object的引用?

以下是Corey McGlone撰写文章的链接

http://www.javaranch.com/journal/200409/Journal200409.jsp#a1

2. …

java string memory-management

69
推荐指数
1
解决办法
2万
查看次数

计算由Java代码创建的String对象

以下代码创建了多少个String对象?

String x = new String("xyz");
String y = "abc";
x = x + y;
Run Code Online (Sandbox Code Playgroud)

我访问过许多网站,其中一些人说这行代码创建了3个对象,有些人说它创建了4个.我只是想知道在执行这行代码后创建了多少个对象.

java string

23
推荐指数
5
解决办法
7502
查看次数

字符串池与常量池

我们来看下面的代码片段:

  String s1 = "Hello";
  String s2 = "Hello"; 
Run Code Online (Sandbox Code Playgroud)

由于实习,两个变量都引用同一个对象.由于字符串是不可变的,因此只创建一个对象并且它们都引用同一个对象.

A constant pool也是一种东西,它包含在类中声明的所有常量(整数,字符串等).它是针对每个班级的.

 System.out.println("Hello");  // I believe this Hello is different from above.
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否string pool在常量池中引用常量字符串对象的池?
  2. 如果是,字符串池在整个应用程序中是通用的还是特定于类?

java string jvm constants

20
推荐指数
1
解决办法
8980
查看次数

标签 统计

java ×3

string ×3

constants ×1

jvm ×1

memory-management ×1