关于java中String的一点理解
来源:互联网 发布:淘宝免费推广 编辑:程序博客网 时间:2024/06/10 11:44
String类是java的最基本类之一,很好的掌握它的原理很是必要的!
1、String的Final类型的,是不可继承 的,final类默认的方法都为final类型,保证了方法不能被重载,成员变量不影响
2、String的本质就是char[] 并且其值是不可改变的
3、String str = "abc"是一种特殊的创建方式,"abc"存在常量区,str只是对其的引用
4、String可以通过+串联,形成一个新的对象
5、java运行时会维护一个String Pool,用来存放程序运行产生的字符串,并且里面的字符串不会重复
6、创建字符串的方式很多,归纳起来有三类:
其一,使用new关键字创建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串联生成新的字符串。比如String s3 = "ab" + "c";
public class MyString {public static void main(String[] args) {//关于String堆栈分析 String str1 = "abc";System.out.println("abc" == str1);/*1、在栈上分配内存存放str1 2、String池中开辟一块空间,存放String常量"abc"; 3、str1指向String池中的"abc"; 4、输出true */String str2 = new String("abc");System.out.println(str1 == str2);/*1、栈上分配内存存放str2 2、此时的"abc"已经存在,然后将"abc"的引用传给String的构造函数,在堆上创建一个新的String对象 then the JVM still arranges for "abc" to be in that pool, and stillprovides a reference to it, but that reference is then passed into aconstructor to create a NEW String object that's NOT in the pool andcopies the first one. It's that second String object which ends upbeing assigned to the reference 3、str2指向在堆上的新创建的对象, 4、输出false */String str3 = "a"+"bc";System.out.println("abc" == str3);/*1、栈上分配内存存放str3 2、根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"abc" 3、str3指向在堆上的"abc"’ 4、输出true */String str4 = "a";String str5 = "bc";String str6 =str4+str5;System.out.println("abc" == str6);/*1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a", 2) 栈中开辟一块中间存放引用s2,s2指向池中String常量"b", 3) 栈中开辟一块中间存放引用str5, 4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象, 5) 引用str6指向堆中(s1 + s2)所还原的新String对象, 6) str6指向的对象在堆中,而常量"ab"在池中,输出为false */String str7 = new String("abc");String str8 = new String("abc");if(str7 == str8){System.out.println("str7 等于str8");}else{System.out.println("str7 不等于str8");}//输出str7 不等于str8}}
2 0
- 关于java中String的一点理解
- 关于java中多线程的一点理解
- java主函数中String[] args的一点理解
- java中关于string的理解
- Java中关于String的一点小问题!
- 关于Java中static方法的一点理解
- 关于java中,类、内部类的一点理解
- 关于java String的一点新认识
- 关于Java中String类的split(String regex)方法的一点困惑
- 关于openlayers中namespace的一点理解
- 关于java数组的一点理解
- 关于java中String方法split的理解
- 对java中synchronized的一点理解
- JAVA代理机制中过的CGLIB代理自己关于的一点小小的理解
- Java 中关于常量池与缓存类的一点理解
- 关于String的一点知识
- 关于string的一点思考
- 关于java中getContentPane()的一点知识
- 【Go web开发之revel+mgo】第9章 其它和??
- MainActivity 访问 fragment_main.xml 中的组件 空指针
- 点击不在这个区域部分,div消失,jquery代码 - hiding an element on click of anything else on the page
- 2014-04-26 求和为N+1(微软面试题)
- c++排序系列之插入排序
- 关于java中String的一点理解
- OpenCV实现Gabor滤波(2)
- codeigniter源代码分析之CI系统运行流程 CodeIgniter.php
- CC_6_智力题
- HDU 1559 最大子矩阵
- A20-AT070TNA2配置
- [计算机基础]ARM-Linux系统调用
- 背包问题
- 利用内存chunk充当数据buffer的泛型的双向队列的简单实现