通过内存解析String的基本原理
来源:互联网 发布:python自学 编辑:程序博客网 时间:2024/05/29 12:55
1.java中String类型有两种赋值方式:直接赋值,如:String s = "a"; 通过new赋值 如String s = new String("a");
2.String类型是引用类型,其内存地址开辟在堆取。但是在堆区有一块区间称为字符串常量池。这块区间是用来干嘛的呢?当直接赋值时,要看值在编译期能不能确定,若能就会在常量池中创建对象,若不能就会在运行期时在堆区(字符串常量池外)创建对象。
3.哪些情况是在编译器能过确定值得呢。(1).直接附明确的值 如:String s ="a";(2). 通过final关键字 如:final String s = "a"; String s1 = s +1; 不确定的情况有 (1)没有使用关键字final 如:String s = "a"; String s1 = s+1; 此时s是变量在编译的时候不能确定其值,故s1在编译器不能确定值,会在运行期在堆中创建对象。(2)String s = getString()+1; 这里的getString会返回一个字符串,无论有没有fianl关键字,都会在堆中开辟空间。
4.直接赋值时,是至多只创建一个对象。如何理解呢?String s ="a";此时会在字符串常量池中常见一个对象,存储"a",如果再有String s1 = "a";那么就不会再创建对象了,因为字符串常量池中已经有了“a” .此时s1只是只想这个“a”即可。
5.用new关键,是至少创建一个对象。String s = new String("a"); 它会先检查在字符串常量池中是否有对象“a”.如果没有,则会先在字符串常量池中创建“a”对象,然后再在堆中创建"a"对象,s指向这个对象。如果常量池中已经有了这个对象,则只在堆中创建即可。
- 通过内存解析String的基本原理
- String类的基本原理
- 关于java中String 的内存解析
- 通过jQuery的camelCase方法,解析string的replace()函数
- 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类型的深度解析
- 详细介绍Linux指令od
- 中概股回归表明中国不差钱?
- Android系统启动过程
- Dynamic len
- ARM 指令种类
- 通过内存解析String的基本原理
- Error:(16, 0) Gradle DSL method not found: 'android()'
- mysql 插入时判断重复时更新
- Buttons(按钮)
- iOS - 报错 linker command failed with exit code 1
- 轻松应用Linux连接校园网
- 如何判断程序集是Managed Assembly
- linux 内存调优
- Vysor 插件破解版(beta版本)解决更新正式版本后的收费限制