八大基本数据类型的包装类
进制转换
Integer类本身拥有大量的方法(想都了解的可以经常去看看源代码),最常用的静态方法是parseInet(String s),s必须是十进制的字符串parseInet(String s,int radix)String s表示的radix进制,radix是进制数 最后的结果转换为10进制
public class Test4 {
public static void main(String[] args) {
int x1 =Integer.parseInt("100");
int x2 =Integer.parseInt("100",8);
System.out.println(x1);
System.out.println(x2);
}
}
运行结果:
100
64
如何把一个进制的数转换为自己需要的进制(例如:我们需要把10进制的5,转换成2进制)Integer为我们提供了toString方法来进行进制间的互相转换
//API:toString(int i,int radix):返回用第二个参数指定的基数表示第一个参数的字符串表示形式
System.out.println(Integer.toString(5,2));
//还有一些特定基数的方法
toBinaryString(int i)//基数为2
to0ctalString(int i)//基数为8
toHexString(int i)//基数16
包装类的继承
自动装箱和自动拆箱
自动装箱:基本数据类型—>包装类
例如:Integer i=10;//自动装箱
自动拆箱:包装类—>基本数据类型
例如:int a=i;//自动拆箱
本质:系统仍帮我们进行了手动装拆箱
Java String类
String 是不可变的类,也就是你一但创建了String对象,他的值就无法改变了,String类是final类,不能有子类
public class Test4 {
public static void main(String[] args) {
String a="gkljl";
System.out.print(a+",");
a = "asdad";
System.out.println(b);
String bb = "ab";
String e="b";
String w = "a"+e;//用了new(装拆箱的本质)
System.out.println(w==bb);//false
}
}
运行结果是:gkljl,asdad
为什么结果不一样了?
原因是:用String 的对象都存放在了堆区,而a只是两个字符串的引用,不是对象本身,当执行到 a = “asdad”;的时候,又在堆区新创建 了一个对象"asdad",而原来的"gkljl"仍然存在。
常量池的概念:Java运行时会维护一个常量池,常量池用来存放运行时产生的各个字符串,并且池中的字符串的内容不能重复。
String类的增删改查
下面的类我就不写了直接上代码内容了
String a="hello";
//字符串的长度(数组的长度是.length)
System.out.println(a.length());
//自付出的拼接除"+"”外还有下面这种 hellojava
System.out.println(a.concat("java"));
//从下标开始提取字符串 llo
System.out.println(a.substring(2));
//按段获取字符串 el
System.out.println(a.substring(1, 3));
//大写转小写 hello
System.out.println("HELLO".toLowerCase());
//小写转大写 HELLO
System.out.println("Hello".toUpperCase());
//去掉字符串左右两边的空格 he llo
System.out.println(" he llo ".trim());
//对字符串里面的字符或字符串的替换
System.out.println("学习java很快乐".replace("java", "python"));
System.out.println("学习java很快乐".replaceAll("java", "Go"));
//字符串的比较用equals
System.out.println("hello".equals(a));//true
System.out.println("Hello".equalsIgnoreCase(a));//true 忽略大小写
//用ASSIC的比较两个字符串是否想等 想等为0,不等正主-新来的(ASSIC)
System.out.println(a.compareTo("hello"));//0
System.out.println(a.compareTo("hellp"));//负数-1
System.out.println(a.compareTo("helln"));//1 值得多少看assic码
System.out.println(a.equalsIgnoreCase("hellN"));//1 忽略大小写
//判断以某字符串开头或结尾
System.out.println(a.startsWith("he"));//true
System.out.println(a.startsWith("llo"));//false
System.out.println(a.endsWith("o"));//true
System.out.println(a.endsWith("ell"));//false
//查找
//char charAt(int index):根据位置获取上面的某个字符
System.out.println(a.charAt(1));//e
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
System.out.println(a.indexOf('l'));//2
int indexOf(int ch,int fromIndex):从formIndex指定位置开始,获取ch在字符中出现的位置
System.out.println(a.indexOf('l', 3));//3
int indexOf(String str):返回的是str在字符串中第一次出现的位置
System.out.println(a.indexOf("ll"));//2
int indexOf(String ch,int fromIndex):从formIndex指定位置开始,获取str在字符串中出现的位置
System.out.println(a.indexOf("lo",1));//3
StringBuffer类与StringBulider类
相同:两个类的用法完全一样
区别:StringBuffer是线程安全,StringBulider(性能好)不是线程安全
单线程用StringBulider,多线程用StringBuffer
StringBuffer与String的区别:一个是可变额,一个是不可变
StringBuffer不能直接赋值。例如:StringBuffer a=“asd”;
StringBuffer:默认情况下初始有16个字符
为什么要用StringBuffer和StringBulider?:常用的String做频繁做拼接时,内部会new对象,浪费性能
StringBuffer b = new StringBuffer();
//拼接 hello
b.append("hello");
//hellojava
b.append("java");
//将字符插入到指定位置 hbellojava
System.out.println(b.insert(1, "b"));
//将字符替换到指定位置heellojava
b.setCharAt(1, 'e');
//反转字符串 两次后仍是heellojava
System.out.println(b.reverse());
System.out.println(b.reverse());
//反转字符还有一种常用的方法:通过String--->char toCharArray()
char[] d=b.toCharArray();//转化为数组 用for循环
//删除指定位置段 java
System.out.println(b.delete(0, 6));
//删除指定字符 jva
System.out.println(b.deleteCharAt(1));
//指定替换字符串 avva
System.out.println(b.replace(0, 1, "av"));
Date类与SimpleDateFormat类
Date date = new Date();
System.out.println(date);//格林威治时间,国外的显示时间
System.out.println(date.getTime());//1970至今的毫秒
//对于时间的的打印
SimpleDateFormat as = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
//将date对象传入 转字符串格式输出
//String----->data
System.out.println(as.format(date));//2019:07:29 20:38:24
//我们还可以根据自己的时间来打印格林威治时间
String asd= "2019-07-29";
SimpleDateFormat ad = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(ad.parse(asd));
Calendar
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(calendar.YEAR));//打印年份
System.out.println(calendar.get(calendar.MONTH)+1);//这个月份的范围只有0-11,所以要+1
System.out.println(calendar.get(calendar.DAY_OF_MONTH));//打印天
calendar.set(calendar.YEAR, 2012);//设置年份
System.out.println(calendar.get(calendar.YEAR));//2012
calendar.add(calendar.YEAR, 4);//在原有的基础上(2012)加年份
System.out.println(calendar.get(calendar.YEAR));//2016
Math类、Random类
根据结果看每种方法的作用
System.out.println(Math.ceil(1.3));//2.0
System.out.println(Math.ceil(1.8));//2.0
System.out.println(Math.floor(1.2));//1.0
System.out.println(Math.floor(1.8));//1.0
System.out.println(Math.round(1.4));//1
System.out.println(Math.round(1.5));//2
//Random
Random random = new Random();
//打印的是[0,5)之间的随机整数
System.out.println(random.nextInt(5));
//之前我们学过还有一种随机的方法
Math.Random()//这是[0.0-1.0)的随机数
(int)(Math.Random()*10+1)//[1,11)之间的整数
System类
System.exit(0);//退出虚拟机,以下的代码不在执行
long start = System.currentTimeMillis();//也是看1970至今的毫秒
long end = System.currentTimeMillis();
System.out.println(end-start);//查看代码运行时间(经常用到)
//获得当前所有系统属性-----后续我们会经常用到自定义配置(属性)
Properties properties= System.getProperties();
System.out.println(properties);//这个太长了 可以自己去看看
String sum = System.getProperty("java.vm.specification.vendor");
System.out.println(sum);//Oracle Corporation
BigInteger类和BigDecemal类
System.out.println(Integer.MAX_VALUE);//Integer最大的数 2147483647
System.out.println(Integer.MAX_VALUE+1);//超出最大值 就变成最小的-2147483648
System.out.println(Integer.MIN_VALUE);//-2147483648
//如何证明BigInregerTest能比Integer容纳更大的数
BigInteger big =new BigInteger(Integer.MAX_VALUE+"");
big.add(new BigInteger(1+""));
System.out.println(big.add(new BigInteger(1+"")));//2147483648
//BigDecemal
System.out.println(0.01+0.09);//两个double相加0.09999999999999999
BigDecimal big = new BigDecimal(0.01);
System.out.println(big.add(new BigDecimal(0.09)));0.09999999999999999687749
//与BigInteger中的一样
BigDecimal big2 = new BigDecimal("0.01");
System.out.println(big2.add(new BigDecimal("0.09")));//0.1