八种基本数据类型,每一个都对应了一个类型,我们把类型称之为,基本数据类型的包装类类型
byte -- Byte
short -- Short
char -- Character
int -- Integer
float -- Float
double -- Double
long -- Long
boolean -- Boolean
我们为什么要将基本数据类型 转换为 类类型?
可以使用类中的成员方法,来减少工作量,提供工作
int类型和String类型的相互转换
A:int to String
1:String.valueOf(10);
2:new StringBuffer().append(10).toString();
3:int[] array1 = {10};Arrays.toString(array1);
4:"" + 10;
5:Integer.toString(10);
B:String to int
1:Integer.valueOf(String).intValue();
2:Integer.parseInt(String);
3:Integer.decode("10").intValue();
Integer 类中的常用方法:
public static String toBinaryString(int i):将10进制的i转换为二进制的无符号表示形式
public static String toOctalString(int i):将10进制的i转换为八进制的无符号表示形式
public static String toHexString(int i):将10进制的i转换为十六进制的无符号表示形式
public static String toString(int i,int radix):
将十进制转换为其他进制,这个进制可以任意指定[2,36]范围之间,超出了,就默认10
public static int parseInt(String s,int radix):其他进制转换为10进制,其他进制也是可以指定的
装箱和拆箱
装箱:基本数据类型 到 对应得包装类型的 转换过程 in box
拆箱:基本数据类型对应的包装类型 到 基本数据类型的转换过程 out of box
// 创建了一个Integer类型的对象或者引用x,并且调用有参的构造,进行初始化
Integer x = new Integer(4);
// 从jdk1.5 以后,开始,简化上面的形式
Integer x1 = 4;// 发生了装箱 int 类型 to Integer
// 装箱:其实发生了 Integer.valueOf(4);
// 下面演示拆箱
int ii1 = x1;// 拆箱 Integer 类型 to int
// 拆箱:其实发生了 x1.intValue();
x = x + 5;// Integer + int
// 先拆箱,后装箱
问题是 Integer的equals()方法有没有被重写
被重写了,重写的逻辑如下,拆箱后比较,比较int类型的值
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
由装箱的知识可知,装箱就是执行了Integer.valueOf()
我们要查看一下valueOf()的源码实现,看看到底发生了什么事
代码一执行,就在Integer的内部产生了Integer类型的数组,数组的长度是256
并且,直接给数组初始化了值,值的范围为[-128-127]
对于valueOf()的调用者来说,如果参数在[-128,127]之间
那么就直接从缓存数组中,取出对应的Integer类型的值,并返回
我们叫这种做法 常量池
否则 参数不在 [-128,127] 这个范围内的 每次都new 一个
转义字符
符号 符号解释 举例
x 字符 x a :代表字母a
\ 反斜线字符 \:代表一个\
字符类
[^abc] 取非 或者叫取反 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] 52个大小写字母的任意一个
[1,9]: 表示 一位的数字,有可能是1-9之间的任意一个数字
预定义字符类
. 任何字符 包括a,或者b等
\d 数字:[0-9] \d == [0-9]
\D 非数字: [^0-9] \D == [^0-9] 非数字就是字母
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头 "^\d"
$ 行的结尾 "\d$"
Greedy 数量词
X? X,一次或一次也没有 a?b: ab b 不匹配:aaab
X X,零次或多次 ab: aaaab
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次 \d{4,14}: 数字要有4位到14位之间
BigDecimal:
不可变的、任意精度的有符号十进制数. 大值范围的 小数
构造方法
BigDecimal(String val)
将 BigDecimal 的字符串表示形式转换为 BigDecimal。
BigInteger 类
不可变的任意精度的整数
可以让超过Integer范围内的数据进行运算
// BigInteger 没有 + 的运算,要想让两个BigInteger 四则运算,只能调用方法
BigInteger bi1 = new BigInteger("10");
BigInteger bi2 = new BigInteger("20");
// bi1 + bi2;
bi1 = bi1.add(bi2);// 返回两个数组的和,但是不会改变原有的数值
System.out.println(bi1);
bi1 = bi1.subtract(bi2);// 返回两个数组的差,但是不会改变原有的数值
System.out.println(bi1);
bi1 = bi1.multiply(bi2);// 返回两个数组的乘积,但是不会改变原有的数值
System.out.println(bi1);
bi1 = bi1.divide(bi2);// 返回两个数组的商,但是不会改变原有的数值
System.out.println(bi1);
java中默认不能返回多个返回值,但是返回多个返回值又很常见,怎么办呢?
一般的处理方案
A:返回数组,或者集合
B:返回一个类型(类可以有很多成员变量)
BigInteger[] array = bi2.divideAndRemainder(bi1);
System.out.println(Arrays.toString(array));
Calendar 日历类
Calendar 是一个抽象类
public int get(int field):根据指定日历的某个部分,返回值
public void add(int field,int amount)
public final void set(int year,int month,int date)
总结 Date 和Calendar都是表示 日期时间的,那么要选用哪个合适呢?
建议:
一般用法,表示当前日期,就用Date即可,配合SimpleDateFormat 来格式化
对日期进行加减运算,设置指定日期时,建议使用Calendar,(高级一点的应用就用Calendar)
Random类
此类的实例用于生成伪随机数流.此类使用 48 位的种子
Random():创建一个新的随机数生成器。 默认种子为当前的系统时间
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
random.nextInt():// 随机数范围[-2^31,2^31-1]
random.nextInt(int n):n = bound 随机数范围[0,bound)
共同学习,写下你的评论
评论加载中...
作者其他优质文章