string操作
来源:互联网 发布:mac的office软件多少钱 编辑:程序博客网 时间:2024/04/27 18:37
[原:http://renyanwei.javaeye.com/blog/255105]
为了清晰了解String的操作,我们来看一段再经典不过的程序
- class StringTest
- {
- public static void main(String[] args)
- {
- String s=new String("abc");
- String s1="abc";
- String s2=new String("abc");
- System.out.println(s==s1);
- System.out.println(s1==s2);
- System.out.println(s==s2);
- }
- }
class StringTest {public static void main(String[] args) {String s=new String("abc");String s1="abc";String s2=new String("abc");System.out.println(s==s1);System.out.println(s1==s2);System.out.println(s==s2);}}
大伙儿都知道内存中有两块儿存储区域,分别是栈和堆,加上JAVA字符串是由字符串池管理的,所以,我们的内存可以这样划分:
程序开始前所有区域都是空的,现在我们执行第一条语句
- String s=new String("abc");
String s=new String("abc");
JAVA执行流程是这样的。首先判断字符串池里有没有值为"abc"的对象,由于这行语句实在程序第一句,字符串池是空的,所以,它会现在字符串池里构造一个值为"abc"的对象,然后执行new语句后,再把“abc”拷贝到堆里面,关于一个new String构造方法解释
然后s再指向这个对象,如图:
所以说,执行完这一行代码后生成了两个对象,一个是在字符串池里,一个是在堆里
然后看第二句:
- String s1="abc";
String s1="abc";
执行到这一句时又产生了几个对象?答案是一个也没产生!执行是这样的,当程序看到"abc"后,会先到字符串池里找看有没有"abc",由于执行完第一行语句后字符串池里已经有"abc"了就不再创建,注意这里并没有new的操作,而是直接常量赋值,所以s1会直接指向这个"abc"而不会在堆里产生新的对象,如图
程序接着往下走
- String s2=new String("abc");
String s2=new String("abc");
这次又产生了几个对象,一个!
程序还是会现在字符串池里找"abc",发现有,就不再字符串池里产生新的对象了,接着执行new操作,记着,在JAVA中,只要出现new操作,一定会有新的对象产生,不管这个对象是否存在多少次,所以它又会在堆里生成一个内容为"abc"的对象,如图
好了,只剩下比较了,注意这里是用的是==,在JAVA中,==永远是比较两个引用是否指向同一个对象的,看到上图,答案不用再揭晓了吧
- string 操作
- string操作
- String 操作
- String操作
- string操作
- String操作
- String操作
- String操作
- String操作
- string操作
- String操作
- string操作
- String操作
- string操作、文件操作
- String 清晰了解String操作
- string----------只适用于string操作
- Spring RedisTemplate操作-String操作
- 对String的操作
- unix编程艺术
- 搜索引擎免费登陆入口大全
- Converting a JSF 1.2 application to JSF 2.0 - Facelets and Ajax
- websphere优化方法收集
- 开始转变
- string操作
- 用js实现上传图片前的预览
- 动态改变input type属性的变通方法
- png图片在ie不透明的解决方案
- JS中innerHTML、outerHTML、innerText、outerText的用法与区别
- JS包含js文件 动态添加css
- ASP如何查询ACCESS数据库中上一周的所有记录
- java打印语句
- 四种类型转化方法