String h = "hi";
这里我们引用的是字符串 h 和字符串 字性 hi。 JVM 拥有一个字符串字性池来存储字符串字性, 这样我们就可以在字符串变换时重新使用这些字符串...
当我们说 repreable,
指的是什么? 我们说的是 address
吗?
String h = "hi";
这里我们引用的是字符串 h 和字符串 字性 hi。 JVM 拥有一个字符串字性池来存储字符串字性, 这样我们就可以在字符串变换时重新使用这些字符串...
当我们说 repreable,
指的是什么? 我们说的是 address
吗?
是的,为了使事情简单一些,你可以把它看作是从同一个地址选择,但更精确的变量是持有相同的数字/对象 的 reference ,即JVM 在绘制对象的适当内存地址时使用该数字/对象 (对象可以在内存中移动,但仍具有相同的参考)。
你可以用这样的代码测试它:
String w1 = "word";
String w2 = "word";
String b = new String("word"); // explicitly created String (by `new` operator)
// won t be placed in string pool automatically
System.out.println(w1 == w2); // true -> variables hold same reference
System.out.println(w1 == b); // false -> variable hold different references,
// so they represent different objects
b = b.intern(); // checks if pool contains this string, if not puts this string in pool,
// then returns reference of string from pool and stores it in `b` variable
System.out.println(w1 == b); // true -> now b holds same reference as w1
遇有
String h = "hi";
String i = "hi";
String j = new String("hi");
依 JDK 版本而定, 编译者 < 坚固> may strong > 做所谓的< a href=" http://www.codeintrctions.com/2009/01/busting-javalangstringinter- myths.html" rel="nofollow"\\\ pargy > interning , 创建一个表示 "hi"
的字节数据的单一实例, 并将其再用于变量引用。 在最新的规格中, 所有 < a href=" http://docs.oracle.com/javase/specs/jls/ se5.0/html/lexical.html#3.10.5" rel="nofolpol" > string < meng > > > astreng > literalals \\\ > 。
使用上一个语句中的 new
关键词,将创建一个完全相同的字节为单独对象的 < strong> new situation 。
字符串库中创建的字符串对象在<强年时间> 强年> <强年> <强年 > 不 强年> 除非调用 .intern ()
。
h == i; // true
h == j; // false
j.intern();
h == j; // true
意思是,如果20个物体使用相同的字面字符串:
private String h = "hi";
所有这些对象实际上都会在内存中引用相同的字符串实例。 这并不重要, 因为无法更改字符串的内容, 因为字符串的内容是不可改变的。 因此相同的实例可以在对象之间没有问题的情况下共享 。
在 JVM 内有一个 < code> string 字形集合库, 里面有在程序使用寿命期间创建的所有 < code> string 。 通过可重复使用, 意思是, 当您想要使用另一个字符和编码完全相同的 < code> 代码时, 新的 < code> string 对象不会被创建。 相反, 引用将指向字符串集合中已经存在的 < code> string 。 这被称为内部连接 。
之所以可以做到这一点,是因为 string
s 在爪哇是不可改变的。
这样做的原因是为了避免创建新的 String
对象的成本。
有关弦字字形游泳池及其运作方式的更多详情请在此查询 : < a href="http://www.xyzws.com/Javafaq/what-is-string-literal-pool/3" rel=“nofoln noreferrer'>http://www.xyzws.com/Javafaq/what-is-string-literal-pool/3
Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...
Check this, List<String> list = new ArrayList<String>(); for (int i = 0; i < 10000; i++) { String value = (""+UUID.randomUUID().getLeastSignificantBits()).substring(3, ...
I am in the middle of solving a problem where I think it s best suited for a decorator and a state pattern. The high level setting is something like a sandwich maker and dispenser, where I have a set ...
I have been trying to execute a MS SQL Server stored procedure via JDBC today and have been unsuccessful thus far. The stored procedure has 1 input and 1 output parameter. With every combination I ...
I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...
If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...
I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....
I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...