string和 new string的区别
2024-09-03 05:26:06
栈区 存 引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。
(1) String str1 = "abcd"的实现过程:首先栈区创建str引用,然后在String池(独立于栈和堆而存在,存储不可变量)中寻找其指向的内容为"abcd"的对象,如果String池中没有,则创建一个,然后str指向String池中的对象,如果有,则直接将str1指向"abcd"";如果后来又定义了字符串变量 str2 = "abcd",则直接将str2引用指向String池中已经存在的“abcd”,不再重新创建对象;当str1进行了赋值(str1=“abc”),则str1将不再指向"abcd",而是重新指String池中的"abc",此时如果定义String str3 = "abc",进行str1 == str3操作,返回值为true,因为他们的值一样,地址一样,但是如果内容为"abc"的str1进行了字符串的+连接str1 = str1+"d";此时str1指向的是在堆中新建的内容为"abcd"的对象,即此时进行str1==str2,返回值false,因为地址不一样。
(2) String str3 = new String("abcd")的实现过程:直接在堆中创建对象。如果后来又有String str4 = new String("abcd"),str4不会指向之前的对象,而是重新创建一个对象并指向它,所以如果此时进行str3==str4返回值是false,因为两个对象的地址不一样,如果是str3.equals(str4),返回true,因为内容相同。
最新文章
- jquery 图片轮播demo实现
- spring类型自动转换——@InitBinder和Converter
- Centos6.5 Zabbix3 server端安装(一)
- DP专题训练之HDU 2955 Robberies
- AutoMappeer自动映射
- SDUT 2877:angry_birds_again_and_again
- DataSet.Clear Method ()
- HDU 1574 RP问题
- MySQL不同库名相同表结构实现主从配置
- Thoughtworks的技术雷达
- php in_array比较原理和类型比较问题
- Ubuntu与Ubuntu系统之间的mount挂载
- Css Rest 方法
- JS关闭当前页面的方法
- Springmvc+Spring+Mybatis实现员工登录注册功能
- Spark源码剖析(七):Job触发流程原理与源码剖析
- Djnago框架组成
- JS 全选、全不选、反选
- Threed.sleep是不会释放锁,而wait是释放锁的(对象锁)
- Xilinx 常用模块汇总(verilog)【03】
热门文章
- redis集群(Sentinel)
- 如何将博客内容输出到pdf
- cordova的安装与配置
- 【读书笔记】--《编写高质量iOS与OS X代码的52个有效方法》
- 蓝桥杯2016年省赛C/C++大学A组
- Github Pull Request的提出与采纳
- npm报错This is probably not a problem with npm. There is likely additional logging
- [代码记录] C语言链表
- 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示
- WLC license管理