Java String理解
来源:互联网 发布:淘宝店铺页面怎么装修 编辑:程序博客网 时间:2024/06/10 02:14
String的创建
对于
String str1 = "hello";//常量区String str2 = "hello";//常量区String str3 = "he";//常量区String str4 = str3 + "llo";//通过StringBuffer的append在堆区新new了一个String,堆区
“hello”存储于常量区(JVM的方法区)
str1和str2分别指向常量区”hello”的地址,所以str1 == str2是true
如果是str3 = new String(“hello”);则会分配在堆区。
str1 == str3 是false
深入理解Java:String
String作为参数
public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String args[]) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); System.out.print(ex.ch); } public void change(String str, char ch[]) { str = "test ok"; ch[0] = 'g'; }}
其实都是引用传递,只是因为String是个特殊的final类,所以每次对String的更改都会重新创建内存地址并存储(也可能是在字符串常量池中创建内存地址并存入对应的字符串内容),但是因为这里String是作为参数传递的,在方法体内会产生新的字符串而不会对方法体外的字符串产生影响。
基本类型传递的是值的副本,引用类型传递的是引用的值的副本。
注意,String是final类型的,不能修改不能被继承
String.intern()
String对象的实例调用intern方法后,JVM会检查常量池
如果没有实例的value属性对应的字符串序列比如”123”(注意是检查字符串序列而不是检查实例本身),就将本实例放入常量池
如果有当前实例的value属性对应的字符串序列”123”在常量池中存在,则返回常量池中”123”对应的实例的引用而不是当前实例的引用,即使当前实例的value也是”123”。
0 0
- 深入理解java String
- 彻底理解java String
- 理解java String
- 彻底理解java String
- JAVA String对象理解
- 深入理解Java:String
- Java String理解
- 深入理解Java:String
- 深入理解Java:String
- 深入理解Java:String
- java String深入理解
- 深入理解Java:String
- 深入理解java String
- 深入理解java String
- 深入理解Java String
- 深入理解Java:String
- Java String深入理解
- java String[] args理解
- File类通过递归列出目录的结构
- hdu2079选课时间(背包)
- DOM事件处理程序学习随笔1(IMOOC)
- 设计模式——装饰者模式
- 关于在servlet和action中返回json数据的一些问题
- Java String理解
- getParameter和getParameterValues
- 基于Unity CG语言所写的HDR算法
- 【第一行代码】Android数据存储
- 使用DatePicker实现日历选择器及使用TimePicker实现时间选择器
- LeetCode Triangle
- 二叉树的前后中序遍历
- [UnityShader2]顶点片段着色器实例(六)
- 不停止MySQL服务增加从库的两种方式