java_常用类_String

来源:互联网 发布:linux使用gcc调试 编辑:程序博客网 时间:2024/05/16 23:40

1.String

String 表示的是字符串,什么是字符串?就是一连串的字符而已.
首先学过java的都应该知道,String不是基本数据类型,是一个引用的类型.
String 是不可变类,一旦String对象创建,包含在字符串序列的内容就是不可变的.直到对象被销毁!
那么接下来就应该认识一下常量池:什么是"常量池"?顾名思义就是存放常量的一个池子.在java虚拟机当中有一块独立的区域就是存放字符串常量和基本类型的地方(public static final). 一旦对象创建完成之后就不能在修改对象中存储的字符串内容,所以说String类型是一个不可变的类型.
String对象比较比较:
单独使用""引号创建的字符串都是常量,编译期就已经确定存储到常量池中.如果用''
则创建的是字符类型,字符串可以理解成一堆字符拼接而成的字符串.如果创建的时候类似于"aa"+"cc"
就已经在编译期间确定了,定存储到常量池中.
如果new String();创建的对象是在jvm虚拟机的堆内存里面存储的,是在运行期间创建的.

使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在堆中;

以下代码解释以上所说的内容:

String s1 = new String("11");

              String s2  = new String("11");

              System.out.println(s1== s2);//false 在对堆内存中,分配的地址不一样,注意 "==" 比较的是地址

              String s3 = "22";

              String s4 = "22";

              System.out.println(s3== s4);//true 在常量池中创建过s3了,所以在s4出来的时候并不会在创建对象了;

              System.out.println(s3== s2);//false 一个在堆中,一个在常量池中,显然不一样.

String s5 = "2" + "2";//这句话其实在编译器编译后的class文件中 已经变成  "22"

              //s5创建了几个对象?//回答:最多一个,如果常量池里面没有就是创建一个,如果常量池里本来就有就是创建零个!

String特点:

不可变的,  一个String对象的内容不能变,一旦内容变量该对象就变成一个新的String对象了


注:以上内容是个人对String理解的部分,如果有误欢迎及时指出,希望大家共同进步.