电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

关于String对象解析


发布日期:2019/5/28
 

<PRE class=java name=code><FONT size=>class StringTest

{

public static void main(String[] args){

String str = new String(abc);//此句代码产生后在内存中会产生几个对象?

/*

*分析首先Java会根据abc在String Pool(字符串池)中查找abc如果没有该

*字符串则在String Pool中创建一个对象然后在通过new关键字在Java内存堆栈中创建

*一个abc对象并且由s变量指向它

*/

String str = abc;//此句代码产生后在内存中会产生几个对象?

/*

*分析在执行第二句代码时Java会依据上面的顺序首先在String Pool中查找abc如果

*找到有此项则变量str指向String Pool中的abc

*/

Systemoutprintln(str == str); //等号较的是内存地址 false

Systemoutprintln(strequals(str));//比较的是值得内容 true

String str = abc;

Systemoutprintln(str == str);

String str = new String(abc);//此句代码产生后在内存中会产生几个对象?

/*

*在执行第三句代码时Java首先也会在String Pool中查找abc对象然后在内存堆栈

*中创建一个新的对象abc并且str变量指向它

*/

Systemoutprintln(str == str); //flalse

Systemoutprintln(strequals(str)); //true

/*

public String intern()返回字符串对象的规范化表示形式

一个初始时为空的字符串池它由类 String 私有地维护

当调用 intern 方法时如果池已经包含一个等于此 String 对象的字符串

(该对象由 equals(Object) 方法确定)则返回池中的字符串

否则将此 String 对象添加到池中并且返回此 String 对象的引用

*/

Systemoutprintln(str == strintern()); //false

Systemoutprintln(str == strintern()); //true

Systemoutprintln(********************);

String hello = hello;

String hel = hel;

String lo = lo;

//在+两边都是常量字符串则将两个字符串合并并且在String Pool中查找hello

//并返回在String Pool中的内存地址正好也是hello变量的内存地址所以第一句代码会输出true

Systemoutprintln(hello == hel + lo);//true

Systemoutprintln(hello == hel + lo);//true

//如果在+两边有一边是引用类型变量Java会将合并成一个字符串并且在堆栈中创建一个

//新的对象并且返回内存地址所以这句代码是输出false

Systemoutprintln(hello == hel + lo); //false

Systemoutprintln(hello == hel+lo); //false

}

}</FONT></PRE>

上一篇:Structs2.0 拦截器

下一篇:Force.com IDE功能一览及新版简介