`
- 浏览:
32569 次
- 性别:
- 来自:
苏州
-
String Pool,String a=new String("abc");
在jvm中存在着String Pool
String pool就是字符串池
例如:
String str1="asd";
String str2="asd";
结果是str1==str2
因为String str1="asd";先会检查String pool中是否有asd这个字符串,若存在不必另外划分区间str2直接引用str1,这样能节省存储的空间
String对象是不变对象,在程序运行过程中可能用到多个具有相同值得String对象,jvm中使用String pool来优化这种情况。当有新的String对象要建立的时候,jvm先检查Pool中时候已经有具有相同值的String对象,如果有就把这个对象的引用传递给新建立的对象,如果没有,就新建立一个对象,并将它放到Pool中。
String对象的建立有两种方式:
String s = "abc";
or
String s = new String("abc");
在String Pool中这两种方式建立的对象有所不同,实际上String Pool只是对无名称String对象有效,即:通过方式一建立的具有相同值的对象也具有相同的内存地址。而对于通过new来建立的对象并不起作用,即用这样方式建立的对象具有自己的内存空间。
class hello{
public static void main(String args[]){
String s1 = "abc";
String s2 = "abc";
System.out.println("s1==s2? "+(s1==s2));
System.out.println("s1.equal(s2)? "+s1.equals(s2));
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println("s3==s4? "+(s3==s4));
System.out.println("s3.equal(s4)? "+s3.equals(s4));
System.out.println("s1==s3? "+(s1==s3));
System.out.println("s1.equal(s3)? "+s1.equals(s3));
}
}
结果:
s1==s2? true //-- ps: s1和s2具有相同的内存地址。
s1.equal(s2)? true
s3==s4? false //-- ps: s3和s4具有不同内存地址。
s3.equal(s4)? true
s1==s3? false
s1.equal(s3)? true
下面的代码会输出什么呢? :)
class hello{
public static void main(String args[]){
String s5 = new String("abc");
String s6 = "abc";
System.out.println("s5==s6? "+(s5==s6));
System.out.println("s5.equal(s6)? "+s5.equals(s6));
}
}
结果:
s5==s6? false
s5.equal(s6)? true
预料之中!
/////////////////////////////////////////////下面为引用////////////////////////////////////////////////////////
FROM:http://www.matrix.org.cn/thread.shtml?forum_id=19&view_id=17459
以上这句说话并没有错.那是在说String 放在String pool时的特例.
for example:
String a = "abc"; // 检查String pool有没有这组字串,发现没有就create一个
String b = "abc"; // 检查String pool有没有这组字串,发现有,就直接引用它的reference
if(a==b) 是true;
但当用到new时就会有如下的情形.
String a = new String("abc");
// 检查String pool有没有这组字串,发现没有就create一个,
// 因为用new,所以同时亦建立一个新的instance给它.
String b = new String("abc");
// 检查String pool有没有这组字串,发现有,就直接引用它的reference
// 因为用new,所以同时亦建立另一个新的instance给它.
知道为甚麽new String("abc")亦要检查String pool吗.
那是因为String()的constructor是原因.
这是其中一个String的constructor : String(String original).
留意当new String("abc")时.
其实已经先做了一个动作,String original = "abc";[color=indigo][/color]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
String a="hello world"; //在java中有一个常量池,当创建String 类型的引用变量给它赋值时,java会到它的常量池中找"hello world"是不是在常量池中已存在。如果已经存在则返回这个常量池中的"hello world"的地址...
String对象的创建问题,分为:编译期和执行期 详细的讲解String对象创建问题
b=new String("abc") typeof b // object a==b //true a===b //false 但是为什么呢?看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串...
String a="abc";//创建字符串方式1 String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String...
关于String s=new String( "Hello")的例子思考
主要介绍了为什么a="abc" 不等于 a=new String("abc"),需要的朋友可以参考下
string str1 = new string(arr); 2、byte[]与string之间的转化 string str = 你好,hello; byte[] bytes; //byte[] 转换成 string bytes = Encoding.UTF8.GetBytes(str); //string 转换成 byte[] (字符串是用哪种...
1. string str; string str=””; string str=null;三者之间有什么区别,最好能用图形表示。 答:区别如下: (1) string str;如果str是局部变量,编译时会忽略该变量,所以不会分配任何内存空间,如下图。如果是类...
主要介绍了java 中String.equals和==的比较的相关资料,需要的朋友可以参考下
public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...
能将类,List,Dictionary类型转换成json同时也能反转换为实体 如以下类的转换案例,希望能帮助大家。...A a = new A(); string json = JsonMapper.ToJson(a); A a1 = JsonMapper.ToObject<A>(json); 如有疑问请下方咨询
{ String logname="",password="",sex="", email="", phone="", message=""; String backNews; int age; public void setLogname(String name) { logname=name; } public String getLogname() { return ...
String foreText=new String(""); String backText=new String(""); String s=new String(); String s1=new String(); Object op=new String(); Object o=new String(); double d, dFore, dBack; int i=9; ...
string类型转成ASCII byte[]:("01" 转成 byte[] = new byte[]{ 0x30, 0x31}) 1 byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( str ); ASCII byte[] 转成string:(byte[] = new byte[]{ 0x30, 0x31...
private String[] sourceFile = new String[255]; //源文件名 private String[] suffix = new String[255]; //文件后缀名 private String canSuffix = ".gif.jpg.jpeg.png"; //可上传的文件后缀名 private String...
String[] arr1 = new String[1]; arr1[0] = "Sex"; String[] arr2 = new String[1]; arr2[0] = "asc"; List sortList = controllerForList.sortList(list, arr1, arr2); 参数1 排序的集合 参数2 排序的字段(与...
( String.xml转Excel翻译工具.zip....................................................................
Java字符串池(String Pool)深度解析.docx
public static final String SYS_PROPERTYNAME = "sys.properties"; public static final String SYS_LISTENERPORT = "PORT"; public static final String SYS_HOSTNAME = "HOST"; public static final String ...
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>(); HashMap<String,String> map1 = new HashMap<String,String>(); HashMap<String,String> map2 = new HashMap<String,String>...