Java 数据类型


 

包装类

8种基本类及其对应的包装类型

基本类型包装类
shortShort
byteByte
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
  • 基本数据类型都不是引用型,不继承任何类(包括Object);
  • 包装类型都使用了 final 修饰,不能被继承重写,内部存储对应基本类型的值的成员变量也都是使用 final 修饰,不能修改其中存储的值,比如 Integer:private final int value;

 

拆箱、装箱

装箱:将基本类型的值转换为包装类型;拆箱:将包装类型转换为基本类型。

自动装箱:jvm根据需要自动将基本类型的值转换为包装类型;自动拆箱:jvm根据需要自动将包装类型转换为基本类型。

通过 == 比较包装类型和基本类型时,会先自动拆箱将包装类型转换为基本类型,再进行比较,如果包装类型为null,自动拆箱时会发生NPE。

 

类型转换

//整除,两个操作数都为整数时,结果舍弃小数、只保留整数部分
System.out.println(3/2);

//(目标类型)  类型转换
int a=(int)1.5;

//包装类型都提供了静态方法 parseXxx(String str) 将String类型转换为对应的基础类型
int integer1 = Integer.parseInt("1");
//包装类型、String都提供了静态方法valueOf(),把其它类型转换为目标类型
Integer integer2 = Integer.valueOf(10);
Integer integer3 = Integer.valueOf("10");
String str1=String.valueOf(1.5);


//包装类型、String都重写了根类Object的toString()方法,包装类型甚至还提供了静态的toString()方法
String str2 = integer2.toString();
String str3 = Integer.toString(2);

 

字符、字符串

1、String有空串"",char|Character有空字符 ‘\u0000’。在java中,2个单引之间必须要有字符、不能直接就是’‘,即不存在’'这种字符。

2、转义字符被认为是一个字符,第一个\只是用于表示转义。

//空串
String str = "";
//空字符
char char2 = '\u0000';
//空格字符
char char1 = ' ';


//转义字符
char char1 = '\\';
char char2 = '\n';

 

各类型的默认初始值

  • 引用类型(包括String):默认初始值为null。
  • 基本类型:整型默认初始值为0,浮点型默认初始值为 0.0,布尔型默认初始值为 false,char默认初始值为空字符 ‘\u0000’,对应常量 Character.MIN_VALUE,注意是空字符,!= null、空串、空格串。

整数默认为int,设置为long需要加后缀 L;小数默认为double,设置为float需要加后缀 F。

 

数组

元素的数据类型要相同
 

一维数组
// 静态初始化一个数组
int[] arr = new int[]{1, 2, 3, 4, 5};
// 可简写为  
int[] arr = {1, 2, 3, 4, 5};


// 动态初始化一个数组,指定数组长度
int[] arr2 = new int[5];
arr2[0] = 1;


// 遍历时只能访问元素的值,不能修改
for(int ele : arr1){

}

数组创建后

  • 容量|长度就固定了、不可改变,如果需要扩容,可以复制元素到新数组中。
  • 未手动赋值的元素,会自动初始化为对应类型的默认值,length获取的是数组的容量,不是手动赋值的元素数量。

 

二维数组

每行的元素个数可不同

// 静态初始化一个二维数组,每行都是一个一维数组
int[][] arr1 = new int[][]{
    {1, 2},
    {1, 2, 3},
    {1, 2, 3, 4, 5}
};


// 动态初始化一个二维数组,只需指定行数,列数可缺省,也可写上,以后再逐个赋值
int[][] arr2 = new int[3][];

 

数组工具类 Arrays

数组转其它类型

//数组转list,参数可以写成数组、参数个数不定的形式
List<String> list1 = Arrays.asList(arr);
List<String> list2 = Arrays.asList("zhangsan", "lisi", "wangwu");

//数组转stream
Stream<String> stream = Arrays.stream(arr);

//将数组转换为易于理解的String,便于打印、阅读
String arrStr = Arrays.toString(arr);


//将String数组|list中的元素拼接为一个String,可以使用stream,也可以使用String的静态方法join
String join1 = list.stream().collect(Collectors.joining(","));
//第二个参数是 Iterable<CharSequence>
String join2 = String.join(",", list);

 

填充、复制

//填充数组,会把数组元素都设置为指定值,不管该位置是否有值(有值即替换)
Arrays.fill(arr, "xxx");
//可以指定填充范围 [fromIndex,toIndex)
Arrays.fill(arr, 0, 3, "xxx");


//参数指定:源数组、要复制的元素个数(目标数组长度)。源数组的元素数量不足时,取对应类型的默认初始值,eg. int是0、引用型是null
int[] arr1 = Arrays.copyOf(arr, arr.length);
//可以指定复制的元素范围 [from,to)
int[] ints = Arrays.copyOfRange(arr, 0, 2);

 

数组比较

//比较2个数组是否相等,先比较是否是同一个数组(内存地址是否相同),如果不是再比较元素数量,如果相同再equals逐个比较元素
boolean equals = Arrays.equals(arr1, arr2);

//递归比较,如果数组的元素还是数组,也会递归比较其中的元素
boolean deepEquals = Arrays.deepEquals(arr1, arr2);

 

排序

//是直接在原数组上进行排序,数组自身改变

//默认自然排序、升序
Arrays.sort(arr);

//可指定排序区域,只对指定区域上的元素进行排序
Arrays.sort(arr, 2, 5);

//可指定排序方式、自定义排序
//第二个参数为 Comparator<T> 接口实例,T为数组元素类型,显式使用Comparator(泛型)时,数组元素类型不能声明为int、float之类的基本类型
Arrays.sort(arr, Comparator.comparing(User::getAge));
Arrays.sort(arr, Comparator.comparing(User::getAge, Comparator.naturalOrder()));
Arrays.sort(arr, Comparator.comparingInt(User::getAge));

//parallelSort() 使用方式和sort相同

 

二分搜索

//二分搜索的使用前提是数组有序,所以需要先使用sort()之类的方法对数组排序,否则结果存在问题

//如果数组中不存在指定元素,返回-1;如果数组中存在多个指定元素,无法保证返回其中哪一个的下标
int index1 = Arrays.binarySearch(arr, "zhangsan");

//可以指定检索范围 [fromIndex,toIndex)
int index2 = Arrays.binarySearch(arr, 0, 3, "zhangsan");

 

以parallel开头的方法和不带此前缀的方法使用方式、效果相同,只是parallel系列方法通过cpu并行,数据量较大时可以提高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值