标签: string-interning

什么时候不应该在 Ruby 中使用 to_sym?

我有一个来自分析提供商的大型数据集。

它以 JSON 格式到达,我将其解析为散列,但由于集合的大小,我的内存使用量激增。几乎所有的东西都以字符串开头(一些值是数字),当然,虽然键被重复了很多次,但许多值也被重复了。

所以我在想,为什么不象征所有(非数字)值呢?

我发现了一些潜在问题的讨论,但我认为对 Ruby 进行全面描述会很好,因为这些问题似乎取决于实习过程的实现(符号化字符串时会发生什么)。

我发现这是在谈论 Java: 使用 java.lang.String.intern() 是好习惯吗?

  • 实习过程可能很昂贵
  • 实习字符串永远不会被取消分配,从而导致内存泄漏

(除了对最后一点有一些争论。)

那么,谁能详细解释一下什么时候不要在 Ruby 中实习字符串?

ruby string symbols string-interning

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

关于java的实习生

我的问题是,如果实习生正在使用字符串和字符串有一个SPC(字符串池常量)为它和实习生概念也使用整数,所以是否有任何整数池常量?如果不是那么它的工作原理?

class InternExample  
{  
 public void print()  
{    
 Integer i=10;  
 Integer j=10;  
 String c="a";  
  String s="a";  
 System.out.println(i==j);// prints true  
 System.out.println(c==s);//prints true  
}  
 public static void main(String args[])  
{  
  new InternExample().print();  
}  
}
Run Code Online (Sandbox Code Playgroud)

java string-interning

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

使用 new 运算符创建了多少字符串

使用 new 运算符创建了多少字符串。

假设我正在使用 new 运算符创建一个字符串。

String str = new String("Cat")
Run Code Online (Sandbox Code Playgroud)

它会创建 2 个字符串,一个在堆中,另一个在字符串池中?

如果它也创建字符串,string poll那么字符串intern方法的目的是什么?

java string string-interning

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

String.intern是否只是复制Java中的对象引用?

是在做:

String a = new String();
String b = a;
Run Code Online (Sandbox Code Playgroud)

并做:

String a = new String();
String b = a.intern();
Run Code Online (Sandbox Code Playgroud)

是一样的吗?

实际上,如果我测试,参考是完全相同的:

String a = new String("te");
String b = a.intern();
String c = a;
String d = "t" + "e";
System.out.print(a.equals(b));
System.out.print(b.equals(c));
System.out.print(a.equals(d));
Run Code Online (Sandbox Code Playgroud)

因为String将永远在String池中?

java string-interning

0
推荐指数
1
解决办法
152
查看次数

将int转换为String计为Autoboxing?

AFAIK当Java自动将原始类型转换为包装类对象而不是其被称为自动装箱时,因为原语被装入包装类.

也是

int test = 3;
String str = String.valueOf(test);
Run Code Online (Sandbox Code Playgroud)

算作自动装箱?

有理由问?

我最近遇到了这个问题.我认为是java 5中引入的自动装箱的原因(Java 4中没有).

java autoboxing string-interning

0
推荐指数
1
解决办法
1313
查看次数

Java中的==运算符

以下在Java中也是如此

"abc"=="abc"
Run Code Online (Sandbox Code Playgroud)

为什么?这两个字符串是两个不同的对象,它们不应该具有相同的对象标识?

java string-interning object-identity

0
推荐指数
1
解决办法
120
查看次数

在编译时或运行时完成的时间内实习?代码中出现这种行为的原因是什么?BlueJ的问题?

输入为当你输入当您在此代码中输入的值string是12.而"string_input"存储输入数 string被声明并在代码初始化而string_input由用户在运行时间期间inputed

情况1

string_5=string_input.substring(0);
System.out.println(string==string_5);
Run Code Online (Sandbox Code Playgroud)

当我们输入"12"时,它返回true

案例2

string_5=string_input.substring(1);
System.out.println(string==string_5);
Run Code Online (Sandbox Code Playgroud)

现在当我们输入"012"时,它返回false

为什么会这样?:/

java behavior substring string-interning

0
推荐指数
1
解决办法
182
查看次数

带有 String 构造函数和 intern 函数的 Java 字符串池

最近学习了Java String Pool,有一些不太明白的地方。

使用赋值运算符时,如果字符串池中尚不存在新字符串,则会在该字符串池中创建一个新字符串。

String a = "foo"; // Creates a new string in the String Pool
String b = "foo"; // Refers to the already existing string in the String Pool
Run Code Online (Sandbox Code Playgroud)

使用 String 构造函数时,我知道无论 String Pool 的状态如何,都会在 String Pool 之外的堆中创建一个新字符串。

String c = new String("foo"); // Creates a new string in the heap
Run Code Online (Sandbox Code Playgroud)

我读的地方,使用构造函数,即使,字符串池中使用。它将字符串插入到字符串池堆中。

String d = new String("bar"); // Creates a new string in the String Pool and in the heap
Run Code Online (Sandbox Code Playgroud)

我没有找到关于此的任何进一步信息,但我想知道这是否属实。

如果这确实是真的,那么 - …

java string garbage-collection string-interning string-pool

0
推荐指数
1
解决办法
188
查看次数