三大常用类型(字符串String、日期类Date、数字类Number)
【摘要】三大常用类型(字符串String、日期类Date、数字类Number)~
前言
hi~
字符串
定义
有关字符串类型,java.lang.String 类,它的本质就是char[],它的实现代码:
1 | public final class String implements CharSequence{ |
也就是说,字符串就是由字符数组组成的。但是,String是不变类,它的实例也就是不变对象。
如:
1 | String s1 = new String("abc");//一旦这个字符串生成,则就是不可变的。 |
对于字符串而言,它是最常用的数据,所以,JVM针对它做了特殊处理;其次,专门有一个“串池”的内存空间来存放String实例,但是,字符串实例是否存放在串池中要由程序员的定义决定。
创建字符串
创建字符串的实例有如下两种方式:
- 普通方式[在堆空间中]
1
2
3
4String s1 = new String("abc");//ok
String s2 = new String("abc");//ok
System.out.println(s1 == s2);//false - 串池方式由于字符串是不变对象,所以,它的每一次拼接都会产生临时对象。
1
2
3
4
5
6String s3 = "abc";//ok
String s4 ="abc";//ok
System.out.println(s3 == s4);//true
s4 = "xyz";//此时,会在串池中重新申请空间并存放 xyz,并把地址赋给s4
String s5 = “abc” + “def” + “xyz”;//abcdefxyz
这个代码会产生5个对象,其中,2个临时对象。s5是引用,是地址。
所以,考虑到字符串的性能问题,JDK提供了StringBuilder
拼接工作,它利用一个可变字符串数组来进行拼接。
StringBuilder和StringBuffer
StringBuilder
和StringBuffer
这两个类的区别:
1.StringBuffer是多线程安全的类
2.StringBuilder是多线程不安全的类
本质上这两个类的功能一模一样,唯一不同的就是StringBuffer
的所以方法都是同步的[synchronized]。
建议大家使用StringBuilder,因为大多数时候我们的环境都是单线程环境的。
即使是多线程环境,我们也可以自己加同步代码块来保证StringBuilder的多线程安全。
常用方法
...
...
字符的编解码操作
编码:把字符转换成字节的过程
解码:把字节转换成字符的过程
每一个字符背后都是一个整数[byte也是一种整数],所以,不同的字符集采用不同长度的编码,如:
ASCII 采用单字节
GBK 采用双字节编码
UTF-8 采用多字节[1~3]
如:
1 | String name = "张三丰"; |
正则表达式
定义:就是一些有“特殊”功能的字符序列。
早先,JAVA并不支持正则表达式,从JDK1.4开始,引入了java.util.regex包,开始正式支持正则。
如何使用正则:
1.先把正则表达式[字符串]编译成Pattern实例
2.利用Pattern提供的方法或者进一步得到Matchr
3.利用Matcher进行匹配
如:
1 | String regex = "a"; |
日期
1 | java.util.Date |
注:在计算机中日期是使用一个长整型来表示的,它规定从1970年1月1日午夜开始到现在所经过的毫秒数。
通过 System.currentTimeMillils() 方法来获取这个值。
利用这个值可以来构建一个Date实例。
构建Date实例
如:
1 | Date now = new Date(); // |
构建一个 2008-8-8号? 怎么办?这就需要利用下面的Calendar类。
1 | java.util.Calendar |
1 | //Code |
日期的格式化
1 | java.text.DateFormat |
由于DateFormat中内置工厂方法的格式不符合我们的使用,所以,此处我们直接使用 SimpleDateFormat。
1 | DateFormat df = DateFormat.getInstance(); |
数字类
数字操作
包装类[Wrapper],也就是针对8种基本类型而言的。
基本类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
double | Double |
float | Float |
char | Character |
boolean | Boolean |
包装类就是基本类型的对象类型,并且基本类型与对应的包装类型之间可以自动解封箱。也就是它们之间可以自动转换。
如:
1 | int i = 9; |
字符串与数字之间的转换
1 | String iStr = "19"; |
大数字类型
java.math.BigInteger 大整数
java.math.BigDecimal 大浮点数
原有的数字范围所不能表达的,就需要使用大数字。
如:
1 | int i = 9; |
数字的格式化 [美化数字]
数字和字符串之间的转换
如:1358.6 => ¥1,358.6
以上的这个美化靠 String.valueOf做不到,需要使用NumberFormat 来进行。
#结束语
bye~