- 八种包装类
public class Integer_02 {
public static void main(String[] args) {
//获取最大值和最小值
System.out.println("int最大值:"+Integer.MAX_VALUE);
System.out.println("int最小值:"+Integer.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
System.out.println(Long.MAX_VALUE);
// 创建Integer对象,int 类型转换为Integer类型
Integer integer1 = new Integer(10);
// 可以直接把纯数学的字符串转换为Integer类型
Integer integer2 = new Integer("123");
System.out.println(integer1);
System.out.println(integer2);
// false,integer1 和integer2 是创建了Integer对象new出来的
// 其内存地址不一样,==比较内存地址
System.out.println(integer1 == integer2);
// 覆写了equals方法 比较值是否相同
System.out.println(integer1.equals(integer2));
}
}
public class Integer_03 {
public static void main(String[] args) {
//1. 对象int--->Integer
Integer integer1 = new Integer(10);
// 2. Integer ---->int
int integer2 = integer1.intValue();
System.out.println(integer2);
// 3.static int parseInt(String s):把纯数字字符串转换成int类型
int integer3 = Integer.parseInt("15945");
System.out.println(integer3);
// 小数允许有一个小数点
double d = Double.parseDouble("3.25");
System.out.println(d);
// 将int类型的值转换成二进制的字符串表示形式
// static String toBinaryString(int value);
String s1= Integer.toBinaryString(12);
System.out.println(s1);
// 转成十六进制
System.out.println(Integer.toHexString(10));
// 转成八进制
System.out.println(Integer.toOctalString(10));
// int --->Integer
Integer integer4 = Integer.valueOf(10);
// String --->Integer
Integer integer5 = Integer.valueOf("10");
System.out.println(integer4==integer5);
}
}
public class Integer_04 {
public static void main(String[] args) {
// 1.int---->Integer
Integer integer1 = Integer.valueOf(11);
System.out.println(integer1);
// 2. Integer--->int
int integer2 = integer1.intValue();
System.out.println(integer2);
// 3.String --->String
Integer integer3 = Integer.valueOf("22");
System.out.println(integer3);
// 4.Integer---->String
String s1 = integer3.toString();
System.out.println(s1);
// 5.String---->int
int integer4 = Integer.parseInt(s1);
System.out.println(integer4);
// 6.int--->String
String s2 = 2 + " ";
System.out.println(s2);
}
}
- JDK1.5开始 新特性
- 自动装箱 :把 基本类型 自动转换为 对应的包装类类型
- 自动拆箱: 把 对应的包装类类型 自动转换为 基本类型
- 并且 自动装箱和自动拆箱是在编译阶段完成的
public class Integer_05 {
public static void main(String[] args) {
// 装箱和拆箱
Integer i1 = Integer.valueOf(11);
int i2 = i1.intValue();
// 自动装箱和拆箱
Integer i3 = 2;
int i4 = i3;
// 此时 10 是int类型,int是没有办法转换为Object类型的
// 所以 需要把int 自动装箱为 Integer类型,然后发生多态,转换为Object类型
m1(10);
}
public static void m1(Object obj){
System.out.println(obj);
}
}
深入理解自动装箱和自动拆箱
1 都是编译时进行的操作
2 自动装箱 的时候,会把赋值 操作 改变为 Integer.valueOf(值)
Integer.valueOf() 底层实现 :
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);
}
输入数字如果在Integer范围内,会在常量池中查找,没有返回一个新的Integer对象,如果在范围内则指向值
IntegerCache 是Integer中的静态内部类,也就是我们说的整型常量池
static final int low = -128; static final int high = 127; static final Integer cache[]; 在static语句块中,对cache数组 进行初始化操作 cache = new Integer[(high - low) + 1]; 长度为256 初始化数组中的数据 cache[k] = new Integer(j++); 数组中数据为 -128,-127,-126.....127 共 256个数字,下标为0~255 此时 整型常量池就初始化完成了,在堆内存中创建了256个对象, valueOf方法中这么写的 // 判断 要赋值的数据值 是否在-128到127之间 if (i >= IntegerCache.low && i <= IntegerCache.high) // 如果在这个范围内的话,之间在case数组中把对应的对象的地址拿出来,返回回去 return IntegerCache.cache[i + (-IntegerCache.low)]; // 如果不再这个范围内的话,就new一个新的对象,保存这个数据 return new Integer(i); 所以 我们写 Integer i1 = 123; Integer i2 = 123; 使用 == 是相等的,因为他们指向堆内存的地址都是同一个 反之 我们写 Integer i3 = 128; 就等于 Integer i3 = new Integer(128) , 如果使用== 肯定是不等的 需要使用equals才可以
public class Integer_06 {
public static void main(String[] args) {
// 自动装箱 = Integer.valueOf(123);
// 整型常量池的范围 : -128~127之间
Integer i1 = 123;
Integer i2 = 123;
// true
System.out.println(i1 == i2);
i1 = new Integer(123);
i2 = new Integer(123);
// false
System.out.println(i1 == i2);
// 这些写法 就等于 new Integer(128);
i1 = 128;
i2 = 128;
// false
System.out.println(i1 == i2);
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
s1 = new String("abc");
s2 = new String("abc");
System.out.println(s1 == s2);
}
}
public class Calendar_01 {
public static void main(String[] args) {
// 获取日历对象
Calendar c = Calendar.getInstance();
// 获取当前是本周第几天, 第一天为周日,最后一天为周六
int i = c.get(Calendar.DAY_OF_WEEK);
System.out.println(i);
// 获取年
int year = c.get(Calendar.YEAR);
// 获取月, 0开始,所以结果要加1
int month = c.get(Calendar.MONTH) + 1;
// 获取日
int day = c.get(Calendar.DAY_OF_MONTH);
// 时
// int hour = c.get(Calendar.HOUR);
// 24小时制
int hour = c.get(Calendar.HOUR_OF_DAY);
// 分
int minute = c.get(Calendar.MINUTE);
// 秒
int second = c.get(Calendar.SECOND);
// 获取星期
int weekday = c.get(Calendar.DAY_OF_WEEK);
String weekdayStr = getWeekday(weekday);
System.out.println(year + "年" + month + "月" + day + "日 " + hour + ":"
+ minute + ":" + second + " " + weekdayStr);
}
public static String getWeekday(int weekday) {
String weekdayStr = "";
switch (weekday) {
case 1:
weekdayStr = "星期日";
break;
case 2:
weekdayStr = "星期一";
break;
case 3:
weekdayStr = "星期二";
break;
case 4:
weekdayStr = "星期三";
break;
case 5:
weekdayStr = "星期四";
break;
case 6:
weekdayStr = "星期五";
break;
case 7:
weekdayStr = "星期六";
break;
default:
break;
}
return weekdayStr;
}
}
—————————————————————————————————
public class Date_01 {
public static void main(String[] args) throws ParseException {
// 获取当前系统时间
Date d1 = new Date();
// 获取时间原点到指定毫秒数的时间
d1 = new Date(1000);
System.out.println(d1);
/**
* 年 y , 月 M , 日 d , 小时 H , 分 m , 秒 s , 毫秒 S
*/
// 创建格式化对象,并指定格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
// 对时间进行格式化,返回字符串类型
String strDate = sdf.format(d1);
// 1970年01月01日 08:00:01 000
System.out.println(strDate);
// 解析 , 字符串格式 必须和解析格式一致
Date d2 = sdf.parse(strDate);
System.out.println(d2);
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class Date_02 {
public static void main(String[] args) {
// 获取当前时间的毫秒数
long time = System.currentTimeMillis();
// 减去十分钟的毫秒数
time -= 10*60*1000;
// 转换为Date
Date d = new Date(time);
// 格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(d));
}
}
- System代表系统,系统很多的属性和控制方法都在这个类中,位与java.lang包下
- long currentTimeMillis() : 获取当前系统时间的毫秒数 , 从1970-1-1 0:0:0 000开始 到现在的时间毫秒数
- 我们这个地区 时间为 1970.1.1 8:00:00 000
- void exit(int status) : 退出虚拟机, 参数为0 表示正常退出 非0 表示异常退出,常用于图形界面,实现退出功能
public class System_01 {
public static void main(String[] args) {
// 计算时间差
long startTime = System.currentTimeMillis();
String[] strs = { "a", "b", "c", "d", "e", "f", "a", "b", "c", "d" };
String temp = "";
// for (int i = 0; i < strs.length; i++) {
// temp += strs[i] + ",";
// }
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.length; i++) {
sb.append(strs[i] + ",");
}
temp = sb.toString();
System.out.println(temp);
long endTime = System.currentTimeMillis();
// 关闭JVM , 0 正常退出, 非0 异常退出, 一般用于关闭图形界面
System.exit(0);
System.out.println("耗时 : " + (endTime - startTime) + "毫秒");
}
}
- Math 提供科学计算和基本的数字操作,常用方法都是静态的,使用类名直接调用即可
- 在java.lang下,使用不需要导包
public class Math_01 {
public static void main(String[] args) {
// abs 绝对值 1.2
System.out.println(Math.abs(-1.2));
// ceil : 向上取整 2.0
System.out.println(Math.ceil(1.0001));
// floor : 向下取整 2.0
System.out.println(Math.floor(2.999999));
// max : 比较谁大 2.3
System.out.println(Math.max(2.3, 2.2));
// min : 比较谁小 2.2
System.out.println(Math.min(2.3, 2.2));
// 平方根 开平方 4
System.out.println(Math.sqrt(16));
// 立方根 开立方 2
System.out.println(Math.cbrt(8));
// 随机数 : 获取一个大于等于0 且 小于1 的数 0.05482041867913556
System.out.println(Math.random());
// 向下取整( 随机数*(最大-最小 +1) + 最小)
// 13.799353961927014 获取的是10~20之间的随机数
//
System.out.println(Math.random()*10 + 10);
// 四舍五入 : 四舍六入五留双, 小数大于0.5 就进位,小于0.5就舍弃,如果是0.5整 , 取偶数
// 2.50001 : 3 , 3.50000 : 4 , 2.50000 : 2
System.out.println(Math.rint(2.5001));
// 2的3次方
System.out.println(Math.pow(2, 3));
}
}
public class BigInteger_01 {
public static void main(String[] args) {
// 参数是字符串
BigInteger v0 = new BigInteger("11");
// 参数是数值
BigDecimal v1 = new BigDecimal(20);
BigDecimal v2 = new BigDecimal(10);
// +
BigDecimal v3 = v1.add(v2);
// -
v3 = v1.subtract(v2);
// *
v3 = v1.multiply(v2);
// /
v3 = v1.divide(v2);
// %
v3 = v1.remainder(v2);
System.out.println(v3);
System.out.println(Long.MAX_VALUE);
BigDecimal sum = new BigDecimal(1);
for (int i = 1; i <=100; i++) {
sum = sum.multiply(new BigDecimal(i));
}
System.out.println(sum);
}
}
#### Random 随机数
public class Random_01 {
public static void main(String[] args) {
// 创建随机数生成器
Random r = new Random();
// 大于等于0 且小于10的整数
int result = r.nextInt(10);
System.out.println(result);
// 生成 10~20
// nextInt(最大值 - 最小值 +1) + 最小值
result = r.nextInt(11) + 10;
System.out.println(result);
// 生成a~z
result = r.nextInt(26);
char c = (char) (result + 97);
System.out.println(c);
}
}