今天看啥
热点:

String的特性解析,String特性解析


String

1、不可变

String是封装的Char数组的对象
char[] a = {‘h’,’e’,’l’,’l’,’o’};
String s=new String(a);

我们简写为String s = “hello”;

在内存中本质是数组存储的数据,数组长度不可变,创建出来的字符串对象不可变,但是变量可变
s这个变量的值是可以改变的,“hello”这个字符串是不可变的

2、比较
String是引用类型,用==判断是否是同一个对象
使用符号进行的运算都在栈内存中完成,比如“=”,“==”等
因此比较的是引用地址或内存地址是否相等

因为字符串有不可变性,因此反复创建字符串是件很消耗内存的事,因此在内存中专门指定了一片区域来存储各种常量,而在常量这个区域专门有一个区域来存放字符串常量,叫做字符串常量池,它有一个特性就是,字符串是唯一的

例如,
String s1 = “hello”;
String s2 = “hello”;
s1==s2 true

创建了s1,字符串常量池有1个“hello”,当再创建s2时,因为也是”hello”,因此常量池中就不再创建了,s2直接指向之前创建的常量

这里写图片描述

因此s1==s2 true


String s3 = new String(“hello”);
String s4 = new String(“hello”);

只要看见new创建的对象就一定在堆内存,new表示申请一片新的空间去存储

这里写图片描述

s1 == s3 false
s3 == s4 false


s5 = “he”+”llo”;
s6 = “he”;
s6 += “llo”;
s7 = s1;

s5是由2个常量相加得到的,常量+常量=常量,这个过程在编译过程中就直接完成了,不需要等程序运行,所以在程序运行时,s5就等于“hello”

因此s1==s5 true


s6的值是 变量+常量 得到的,是一个变量,对于程序而言,变量只有在程序运行时才知道,而这时候得到的值绝对不可能在常量池里,所以,s6产生的值在堆内存里,而s1在常量池里

因此s1==s6 false


s7是的赋值是直接把s1的引用地址赋值

因此s1== s7 true

www.bkjia.comtruehttp://www.bkjia.com/qtjc/1304358.htmlTechArticleString的特性解析,String特性解析 String 1、不可变 String是封装的Char数组的对象 char[] a = {h,e,l,l,o}; String s=new String(a); 我们简写为String s = hell...

相关文章

帮客评论

视觉看点