越来越意识到编译原理,操作系统,计算机组成原理和计算机网络这四门课的重要性了。。到后期自学的作用不言而喻。。
一、包装类
二、字符串
三、可变字符序列
四、数学相关类的使用
五、日期时间API
一、包装类
1、包装类
当要使用只针对对象设计的API或新特性(例如泛型),那么基本数据类型的数据就需要包装类来包装
包装类:
序号 基本数据类型 包装类
1 byte Byte
2 short Short
3 int Integer
4 long Long
5 float Float
6 double Double
7 char Char
8 boolean Boolean
9 void Void
2、装箱与拆箱
只能与自己对应的类型之间才能实现自动装箱与拆箱
装箱:把基本数据类型转为包装类对象
转为包装类的对象,是为了使用专门为对象的API和特性
拆箱:把包装类对象拆为基本数据类型
转为基本数据类型,一般是以为需要运算,java中的大多数运算符是为基本数据类型设计的。比较、算术等。
总结:引用数据类型能用的运算符有哪些?
(1)instanceof
(2)=:赋值运算符
(3)==和!=:用于比较地址,但是要求左右两边对象的类型一致或者是由父子类继承关系
(4)对于字符串这一种特殊的对象,支持+(字符串的拼接)
3、包装类的API
和字符串之间的转换
(1)把基本数据类型转为字符串
String str = String.valueOf(a);
(2)把字符串转换为基本数据类型
int a = Integer.parseInt("100");
double a = Double.parseDouble("100");
数据类型的最大最小值
Integer.MAX_VALUE和Integer.MIN_VALUE
Long.MAX_VALUE和Integer.MIN_VALUE
转大小写
Character.toUpperCase('a');
Character.toLowerCase('A');
转进制
Integer.toBinaryString(int i);
Integer.toHexString(int i);
Integer.toOctalString(int i);
4、包装类对象的缓存问题
包装类 缓存对象
Byte -128~127
Short -128~127
Integer -128~127
Long -128~127
Float 没有
Double 没有
Character 0~127
Boolean true和false
Integer i = new Integer(1);//新new的在堆中
Integer j = 1;//这个用的是缓冲的常量对象,在方法区
System.out.println(i == j);//false
Integer i = new Integer(1);
int j = 1;
System.out.println(i == j);//true,和基本数据类型进行比较,都是先将引用数据类型进行拆箱,然后再进行比较运算符的运算
二、字符串
1、字符串的特点
(1)字符串String类型本身是final声明的,意味着不能继承String
(2)字符串的对象也是不可变对象,意味着一旦进行修改就会产生新的对象
我们修改了字符串之后,如果想要获得新的内容,必须重新接受
如果程序中涉及到大量的字符串的修改操作,那么此时的时空消耗比较高,可能需要考虑使用StringBuilder或StringBuffer
(3)String对象内部是用字符数组进行保存的
(4)String类中这个char[] value数组也是final修饰的,意味着这个数组不可变,然后它是private修饰,外部不能直接操作它,String类型提供的所有方法都是用新对象来表示修改后内容的,所以保证了String对象的不可变
(5)就因为字符串对象设计为不可变,那么所以字符串有常量池来保存很多常量对象
常量池在方法区中
细致来说:
JDK1.6及之前:方法区
JDK1.7:堆
JDK1.8:元空间
2、字符串对象的比较
(1)==:比较是对象的地址
只有两个字符串变量都是指向字符串的常量对象时,才会返回true
(2)equals:比较是对象的内容,因为String类型重写了equals方法
只要两个字符串的字符内容相同时,就会返回true
(3)equalsIgnoreCase:比较的是对象的内容,不区分大小写
(4)compareTo:String类型重写了Comparable接口的抽象方法,自然排序,按照字符的Unicode编码值进行比较大小,严格区分大小
(5)compareToIgnoreCase:不区分大小写,其他按照字符的UNICODE编码值进行比较大小
3、空字符的比较
(1)哪些是空字符串
String str1 = ""
String str2 = new String();
String str3 = new String("");
(2)如何判断某个字符串是否为空字符串
if("".equals(str))
if(str != null && str.isEmpty())
if(str != null && str.equals())
if(str != null && str.length() == 0)
4、字符串对象的个数问题
(1)字符串常量对象
String str1 = "hello";//1个,常量池当中
(2)字符串的普通对象
String str2 = new String();
String str22 = new String("");
//两个对象,一个是常量池中的空字符串对象,一个是堆中的空字符串对象
(3)字符串的普通对象和常量对象一起
String str3 = new String("hello");
//str3首先指向堆中的一个字符串对象,然后堆中字符串的value数组指向常量池中对象的value数组
5、字符串拼接结果
原则:
(1)常量+常量:结果是常量
(2)常量与变量或变量与变量:结果是堆
(3)拼接后调用intern()方法:结果在常量池
6、字符串的API
(1)isEmpty()
(2)length()
(3)String concat():拼接,等价于“+”
(4)boolean contanis()
(5)int indexOf():从前往后找,没有返回-1
(6)int lastIndexOf()从后往前找,没有返回-1
(7)char charAt(Index)
(8)new String (char[]) 或 new String(char[],int,int)
(9)char[] toCharArray()
(10)byte[] getBytes():编码,把字符串变为字节数组,按照平台默认的字符编码进行编码
byte[] getBytes(字符编码):按照指定的编码方式进行编码
(11)new String(byte[])new String(byte[],int,int):解码,按照平台默认的字符编码进行解码
new String(byte[],字符编码方式)或new String(byte[],int,int,字符编码方式):解码,按照指定的编码方式进行解码
(12)String subString(int begin):从begin开始到最后
String subString(int begin, int end):从begin到end
(13)boolean matchs(正则表达式)
(14)String replace(xx,xx):不支持正则
String replaceFirst(正则,value):替换第一个匹配部分
String replaceAll(正则,value):替换所有匹配部分
(15)String[] split(正则):按照某种规则进行拆分
(16)boolean startsWith(xx):是否已xx开头
boolean endsWith:是否以xx结尾
(17)String trim():去掉前后空白符,字符串中间的空白符不会去掉
(18)String toUpperCase()转大写
String toLowerCase()转小写
三、可变字符序列
1、StringBuilder和StringBuffer
StringBuilder:线程不安全的(因为他的方法有synchronized修饰)
StringBuffer:线程安全的
2、String和StringBuilder、StringBuffer区别?
String:不可变对象、不可变字符序列
StringBuilder、StringBuffer:可变字符序列
3、常用的API,StringBuilder、StringBuffer的API完全一致
(1)append(xx):拼接、追加
(2)insert(int index,xx):插入
(3)delete(int index, int end):范围删除
deleteCharAt(int index)删除单个元素
(4)set(int index,xx)替换某个元素
(5)reverse()反转
四、和数学相关的
1、java.lang.Math类
(1)sqrt()
(2)pow(x,y)求x的y次方
(3)random()返回(0,1)范围的小数
(4)max(x,y)
min(x,y)
(5)round(x)四舍五入
cell(x)向上取整
floor(x)向下取整
2、java.math包
BigInteger大整数
BigDecimal大小数
运算通过方法完成:add(),substract(),multiply(),divide()
五、日期时间API
1、jdk1.8之前
(1)java.util.Date
new Date()当前系统时间
long getTime():返回该日期时间对象距离1970-01-01 0.0.0.0毫秒之间的毫秒值
new Date(long 毫秒):把该毫秒值换算成日期时间对象
(2)java.util.Calendar
getInstance()得到Calendar的对象
get(常量)
(3)java.text.SimpleDateFormat:日期时间的格式化
y:表示年
M:月
d:天
H:小时,24小时
h:小时,12小时
m:分
s:秒
S:毫秒
E:星期
D:年当中的天数
2、JDK1.8之后
java.time及其子包中
(1)LocalDate,LocalTime,LocalDateTime
now:获取系统日期或时间
of(xxx):获取指定的日期或时间
运算:运算后得到新对象,需要重新接收
plus()在当前日期或时间对象上加xx
minus()在当前日期或时间对象上减xx
(2)DateTimeFormatter:日期时间格式化