JAVA String注意事项

String知识点

String:字符串,为final类不可继承,在jdk1.8及之前为char[],1.9之后改成byte[],不可变的字符序列,通过字面量的方式(String str = “111”)给一个字符串赋值,此时的字符串值申明在字符串常量池中,字符串常量池中不存在相同的字符串

String 的内存分配

在java 中的八个基本数据类型,六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型

类型默认值最小值最大值备注
byte0-128(-2^7)127(2^7-1)byte 数据类型是8位有符号的,以二进制补码表示的整数,byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
short0-32768(-2^15)32767(2^15 - 1)short 数据类型是 16 位有符号的以二进制补码表示的整数,Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
int0-2,147,483,648(-2^31)2,147,483,647(2^31 - 1)int 数据类型是32位有符号的以二进制补码表示的整数,一般地整型变量默认为 int 类型;
long0L-9,223,372,036,854,775,808(-2^63)9,223,372,036,854,775,807(2^63 -1)long 数据类型是 64 位有符号的以二进制补码表示的整数**,这种类型主要使用在需要比较大整数的系统上,"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
float0.0ffloat 数据类型是单精度、32位、符合IEEE 754标准的浮点数,float 在储存大型浮点数组的时候可节省内存空间,浮点数不能用来表示精确的值,如货币
double0.0ddouble 数据类型是双精度、64 位、符合IEEE 754标准的浮点数,浮点数的默认类型为double类型,double类型同样不能表示精确的值,如货币
booleanfalseboolean数据类型表示一位的信息,只有两个取值:true 和 false,这种类型只作为一种标志来记录 true/false 情况;
char\u0000(即为 0)\uffff(即为65、535)char类型是一个单一的 16 位 Unicode 字符,char 数据类型可以储存任何字符

八种基本数据类型与String提供了常量池的概念(静态常量池)(即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间,JAVA系统级别得缓存,由系统协调),jdk6之前字符串常量池放在永久代,jdk7及以后存放在java堆中
常量池,运行时常量池,字符串常量池几个概念说明:常量池,运行时常量池,字符串常量池区别

字符串的拼接操作

  • 常量与常量的拼接结果在常量池中,原理是编译期优化
  • 常量池中不会存在相同的内容的常量
  • 只要其中有一个变量,结果就在堆中,拼接的原理是stringBuilder
  • 如果使用了intern()方法,则主动将变量池中的还没有的字符串对象放入池中,并返回对象地址

String 的intern()使用

  • jdk1.6如果串池中有,并不会放入串池中,返回已有的串池中的对象的地址,如果没有,会把此对象复制一份放入串池中,并返回串池中的对象地址
  • jdk1.7开始如果串池中有,并不会放入串池中,返回已有的串池中的对象的地址,如果没有,会把此对象的引用地址复制一份放入串池中,并返回串池中的引用地址

浅谈Java String.intern()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值