我有一个来自分析提供商的大型数据集。
它以 JSON 格式到达,我将其解析为散列,但由于集合的大小,我的内存使用量激增。几乎所有的东西都以字符串开头(一些值是数字),当然,虽然键被重复了很多次,但许多值也被重复了。
所以我在想,为什么不象征所有(非数字)值呢?
我发现了一些潜在问题的讨论,但我认为对 Ruby 进行全面描述会很好,因为这些问题似乎取决于实习过程的实现(符号化字符串时会发生什么)。
我发现这是在谈论 Java: 使用 java.lang.String.intern() 是好习惯吗?
(除了对最后一点有一些争论。)
那么,谁能详细解释一下什么时候不要在 Ruby 中实习字符串?
我的问题是,如果实习生正在使用字符串和字符串有一个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) 使用 new 运算符创建了多少字符串。
假设我正在使用 new 运算符创建一个字符串。
String str = new String("Cat")
Run Code Online (Sandbox Code Playgroud)
它会创建 2 个字符串,一个在堆中,另一个在字符串池中?
如果它也创建字符串,string poll那么字符串intern方法的目的是什么?
是在做:
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池中?
AFAIK当Java自动将原始类型转换为包装类对象而不是其被称为自动装箱时,因为原语被装入包装类.
也是
int test = 3;
String str = String.valueOf(test);
Run Code Online (Sandbox Code Playgroud)
算作自动装箱?
有理由问?
我最近遇到了这个问题.我认为是java 5中引入的自动装箱的原因(Java 4中没有).
以下在Java中也是如此
"abc"=="abc"
Run Code Online (Sandbox Code Playgroud)
为什么?这两个字符串是两个不同的对象,它们不应该具有相同的对象标识?


的值string是12.而"string_input"存储输入数
string被声明并在代码初始化而string_input由用户在运行时间期间inputed
string_5=string_input.substring(0);
System.out.println(string==string_5);
Run Code Online (Sandbox Code Playgroud)
当我们输入"12"时,它返回true
string_5=string_input.substring(1);
System.out.println(string==string_5);
Run Code Online (Sandbox Code Playgroud)
现在当我们输入"012"时,它返回false
为什么会这样?:/
最近学习了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)
我没有找到关于此的任何进一步信息,但我想知道这是否属实。
如果这确实是真的,那么 - …