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
    评论
Java抽象类的注意事项如下: 1. 抽象类不能被实例化,只能被继承。 2. 抽象类可以包含抽象方法和非抽象方法。 3. 如果一个类继承了抽象类,那么它必须实现抽象类中所有的抽象方法,除非它自己也声明为抽象类。 4. 抽象方法不能有方法体,只有方法声明。 5. 抽象方法必须在抽象类中声明。 6. 抽象类可以有构造方法,但是不能被用来实例化对象。 7. 抽象类可以包含静态方法、实例变量和静态变量。 8. 抽象类可以实现接口,而且不需要实现接口中的所有方法。 9. 抽象类的子类必须实现抽象类中所有的抽象方法,除非它自己也声明为抽象类。 下面是一个抽象类的例子,其中包含了抽象方法和非抽象方法: ```java abstract class Shape { private String color; public Shape(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public abstract double getArea(); } class Circle extends Shape { private double radius; public Circle(String color, double radius) { super(color); this.radius = radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public double getArea() { return Math.PI * radius * radius; } } class Rectangle extends Shape { private double length; private double width; public Rectangle(String color, double length, double width) { super(color); this.length = length; this.width = width; } public double getLength() { return length; } public void setLength(double length) { this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getArea() { return length * width; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值