Java包装类
一、 包装类和基本数据类型的转换
为了使用方便Java中将基本数据类型进行了封装:除了Integer和Character之外,其他六个类的类名和基本数据类型基本保持一致,只是把首字母改成了大写
boolean -> Boolean char -> Character byte -> Byte string -> String int -> Integer
float -> Float double -> Double long -> Long
int和Integer可以相互转化
int i= 5;
Integer n1 = new Integer(i);
Integer n2 = new Integer(5);
int n3 = n2.intValue(5);
自从jdk1.5之后,有了自动拆装箱语法
自动装箱:将基本数据类型封装为面向对象数据类型
自动拆箱:将对象重新转换为基本数据类型(将包装类转换为基本数据类型)
int-Integer | Integer-int |
---|---|
Integer.valueOf()自动装箱 | Integer.intValue() 自动拆箱 |
valueOf源码分析
public static Integer valueOf(int i) {
assert IntegerCache.high>= 127;
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i);
}
————————————————
Integer i = 5; 相当于编译器执行了valueOf(5)操作。这个方法就是返回一个Integer对象,只是在返回之前,看作了一个判断,判断当前i的值是否在[-128,127]区间,且IntegerCache中是否存在此对象,如果存在则直接返回引用,否则,调用构造器执行类型转换!
4、包装类的缓存值
各个包装类的缓存值
boolean:true和false
byte:-128~127
char:0~127
short:-128~127
int:-128~127
long:-128~127
float和double没有缓存值
转成double类都有什么好处
- 首先包装类是一种类,类就有定义好的属性或者方法,这些方法就完成了一些特定的功能,我们可以调用这些方法完成一些工作
- 基本数据类型都用隐形的默认值,不是类的对象,不能为null,很多时候我们可能需要这些类型为null,这时就需要包装类了
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/daee545127e94293913fcf18309994b8.png
//其他进制转换到十进制
System.out.println(Integer.parseInt("100",2));
System.out.println(Integer.parseInt("10"));
System.out.println(Integer.parseInt("100"));
System.out.println(Integer.parseInt("1"));
//十进制转换到其他进制
System.out.println(Integer.toString(100,3));
System.out.println(Integer.toString(100,4));
ic static void main(String[] args)
{
//public static boolean isUpperCase(int codePoint)判断给定的字符是否为大写字符
System.out.println(Character.isUpperCase('A'));
System.out.println(Character.isUpperCase('a'));
System.out.println(Character.isUpperCase('0'));
//public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符
System.out.println(Character.isUpperCase('A'));
System.out.println(Character.isUpperCase('a'));
System.out.println(Character.isUpperCase('0'));
// public static boolean isDigit(int codePoint):判断给定的字符是否是数字
System.out.println(Character.isUpperCase('A'));
System.out.println(Character.isUpperCase('a'));
System.out.println(Character.isUpperCase('0'));
//public static char toUpperCase(char ch):把给定的字符转换为大写字符
System.out.println(Character.toUpperCase('a'));
//public static char toLowerCase(char ch):把给定的字符转换为小写字符
System.out.println(Character.toLowerCase('A'));
}
二、包装类和包装类之间的互相转换
2.1String 转换成 Integer
public static Integer string2Integer(String str){
Integer num = null;
if(isNull(str)){
return num;
} else{
try{
num = Integer.parseInt(str);
}catch (NumberFormatException var3){
log.info("Integer parse error [{}]",str);
}
return num;
}
}
2.2 String 转换成Long
public static Long string2Long(String str){
return isNull(str) ? null:Long.parseLong(str);
}
2.3 Long转换成String
public static String long2String(Long l){
retrun isNull(l) ? null:l.toString;
}
2.4 Integer转换成String
public static String interger2String(Integer num){
return isNull(num) ? null:String.valueOf(num);
}
String.valueOf底层源码
public static String valueOf(Object obj){
return isNull(obj) ? "null" : obj.toString;
}
java 泛型
集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在jdk1.5之前只能把元素类型设计为Object,jdk1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他部分都是确定的,例如关于这个元素如何保存,如果管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection,List,ArrayList 这个 就是类型参数,即泛型。
泛型的概念
所谓泛型:就是允许在定义类、接口时通过一个标识表示类中某个属性的累心更或者是某个方法的返回值及参数类型。
IO流
1、file类的使用
File类的一个对象,代表一个文件或一个文件目录(文件夹)
File类声明在java.io下
//相对路径
File file1 = new File("Hello.txt");
//绝对路径
File file2 = new File("D:\\JavaStudy\\BigDeclmal1\\src\\File");
注意:路径中的每一级目录之间用一个路径分隔符隔开
路径分隔符和系统有关:
windows和DOS系统默认使用"“来表示
UNIX和URL使用”/"来表示
Java程序支持跨平台运行,因此路径分隔符要慎用
为了解决这个隐患,File类提供了一个常量“
public static final String separator
根据操作系统,动态的提供分隔符
File file = new File("d: " + File.separator + "atguigu" + File.separator + "info.txt");
File类的获取功能:
- public String getAbsolutePath() :获取绝对路径
- public String getPath():获取路径
- public String getName() : 获取名称
- public String getParent():获取上层目录路径。若无,返回null
- public long length():获取文件长度。不能获取目录的长度
- public long lastModified():获取最后一次的修改时间,毫秒值
- public String[] list():获取指定目录下的所有文件或文件目录的名称数组
- public File[] listFiles()::获取指定目录下的所有文件或者文件目录的File数组
File类的重命名功能 - public boolean renameTo(File dest):那文件重命名为指定的文件路径