String 和 new String的区别
来源:互联网 发布:b2b发布信息软件 编辑:程序博客网 时间:2024/06/11 23:38
知识点:栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象的内容。注意区分这几个知识点。
一、用语言简单表达对象在内存执行过程的实例:
1、String str1 = "abc"的实现过程,首先在栈区创建str引用(相当是名字),然后在String池(独立于栈和堆而存在,存储不可变量)
中找其指向的内容为"abc"的对象。结果有两种,一是存在,则直接将str1指向"abc";二是不存在,则创建一个"abc",然后str1指向
该对象。
2、接下来,我们创建一个对象str2,对象的值也是abc,String str2 = "abc";这个对象在内存里的实现过程是怎样的呢?
好,我们来分析一下。是这样的,String池中已经存在"abc",则str2直接指向String池中已经存在的"abc",不再重新创建对象。
3、当str1进行了赋值(str1 = "abcd")则str1不再指向"abc",而是指向String池中新创建的对象"abcd"。
4、当str2进行了字符串的+连接str2 = str2 + "d";此时str2指向的是在堆中新建的内容为"abcd"的对象。
二、下面给出代码,知道new跟不new的结果是怎么的。
public class StringAndNewString { public static void main(String[] args) { String str1 = "abcd"; String str2 = "abcd"; String str3 = new String("abcd"); String str4 = new String("abcd"); System.out.println(str1 = = str2);//ture,地址一样 System.out.println(str3 = = str4);//false,地址不一样 System.out.println(str2.equals(str1));//ture,值一样 System.out.println(str2.equals(str3));//ture,值一样 System.out.println((str1 + "a") == (str2 + "a"));//false;进行了+连接地址不一样 }}
三、总结;通过对象在内存中执行的分析,自己更加明白对象在内存中是如何运作的,以前的迷惑到现在的清晰,对对象的执行过程又
有了新的认识这是我最大的收获。学习得一步一步来,不能急于求成,滴水穿石,慢慢积累!
阅读全文
0 0
- String = "" 和 new String("")的区别
- String和New String()的区别
- new String() 和 String 的区别
- String 和 new String()的区别
- Java String 和 new String()的区别
- String 和 new String()的区别
- String和new String 的区别
- String 和 new String的区别
- new String[] 与new String[] {""}的区别
- "hello"和new String("hello")的区别?
- new String("abc")和“abc”的区别
- "hello"和new String("hello")的区别
- new String("abc")和“abc”的区别
- Java中String和new String的区别,比较
- 【java基础】之String和new String()的区别
- String直接赋字符串和new String的区别
- String直接赋字符串和new String的区别
- java 中的String 和new String 的区别
- 【转】可复用的MyAdapter适配器
- 数据结构:堆和栈
- oracle存储过程
- 子类对象的实例化
- springmvc 工作原理
- String 和 new String的区别
- java操作excel文件
- (转+改)Hough变换--直线检测
- 漫谈jvm垃圾收集(1)
- Python---序列化
- 超级有意思的程序代码注释
- android studio 安装或者导入项目过程中常见的问题(持续更新)
- 彻底删除topic
- 大数据入门——手写体数据识别(支持向量机)