包机制
Java 是面向对象的程序语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型,int的包装类型就是Interger。
从Java 5 开始就引入了自动装箱/拆箱机制,是的两者可以相互转换。
装箱就是自动将基本数据类型转换为包装器类型
拆箱就是自动将包装类型转换为基本数据类型。
原始类型:boolean, char, byte, short, int, long, float, double
包装类型:Boolean,Character, Byte, Short, Integer, Long, Float, Double
基本类型和包装类的区别
- int是基本数据类型,Integer是其包装类,注意是一个类。
- Integer 能为null, int不能。
- 更多见代码实例
//装箱就是自动将基本数据类型转换为包装器类型
Integer a1 = 1123;
Integer a2 = 1123;
System.out.println(a1 == a2 );; //false
System.out.println(a1.equals(a2)); //true
//拆箱就是自动将包装类型转换为基本数据类型。
String str = "12345";
Integer s = Integer.parseInt(str);
System.out.println(s); //12345
System.out.println("<----------->");
int i1 = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
Integer i4 = 128;
System.out.println(i1 == i2); //true Integer 会自动拆箱为int
System.out.println(i1 == i3); //true
System.out.println(i2 == i3); //false
System.out.println(i2 == i4); //false
System.out.println("<----------->");
Integer j1 = 127; //编译时被翻译成:Integer j1 = Integer.valueOf(127);
//valueOf()这个函数对于-128到127之间的函数会进行缓存,而不会new Integer(),
// 此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。
Integer j2 = 127;
System.out.println(j1 == j2); //true
Integer j3 = new Integer(127);
System.out.println(j1 == j3); //false
Math
System.out.println(Math.PI); //获取圆周率
System.out.println(Math.max(10,12)); //求最大值 12
System.out.println(Math.round(12.45)); //四舍五入 12
System.out.println(Math.round(12.51)); //13
System.out.println(Math.ceil(9.01)); //向上取整 10.0
System.out.println(Math.floor(9.01)); //向下取整 9.0
System.out.println(Math.abs(-12)); //取绝对值 12
System.out.println(Math.pow(2,3)); //2的3次方
System.out.println(Math.random()); //获取0到1之间的随机小数(不包含0和1)
//取一位小数点
double s = 10.0;
System.out.println(Math.round(10.548*s)/s); //10.5
//精度丢失问题
System.out.println(123.3/100); //1.2329999999999999
//解决精度丢失问题要使用BigDecimal,要使用字符串转换 //不知用字符串转换的话计算结果不准确
BigDecimal big1 = new BigDecimal("123.3");
BigDecimal big2 = new BigDecimal("100");
big1 = big1.divide(big2);
System.out.println(big1); //1.233
Date类
Date代表一个特定的瞬间,以毫秒级精度
常用函数
public static void main(String[] args) throws InterruptedException {
Date date = new Date();
System.out.println(date); //Tue May 10 17:27:03 CST 2022
// getTime 获取该事件的毫秒数
System.out.println(date.getTime());
//setTime 以毫秒单位设置一个时间
date.setTime(0);
System.out.println(date.getTime()); //0
Date date2 = new Date();
Thread.sleep(1000);
Date date3 = new Date();
System.out.println(date2.before(date3)); //true
System.out.println(date2.after(date3)); //false
System.out.println(System.currentTimeMillis()); //获取当前时间的毫秒数
}
操作日期主要涉及到以下几个类:
SimpleDateFormat格式化日期
public static void main(String[] args) throws ParseException {
Date d = new Date();
System.out.println(d); //Tue May 10 17:50:47 CST 2022
SimpleDateFormat dateFormat1 = new SimpleDateFormat();
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateText1 = dateFormat1.format(d); //格式化日期
String dateText2 = dateFormat2.format(d);
System.out.println(dateText1); //22-5-10 下午5:46
System.out.println(dateText2); //2022-05-10 17:46:04
String str = "2000-01-10 17:46:04";
Date d2 = dateFormat2.parse(str); //将字符串转换为Date类
System.out.println(d2); //Fri Jan 10 17:46:04 CST 2020
}
Calendar
Calendar类主要用于操作日期
public static void main(String[] args) {
//Calendar 尽管为抽象类,但是自身封装了一个方法实例化
Calendar c1 = Calendar.getInstance();
System.out.println(c1.get(Calendar.YEAR)); //获取年份
System.out.println(c1.get(Calendar.DAY_OF_YEAR)); //获取当年的第几天
int m = c1.get(Calendar.MONTH); //获取月份 注意月份是从0开始的
System.out.println(m + 1);
System.out.println(c1.get(Calendar.DATE)); //日期
System.out.println(c1.get(Calendar.HOUR)); // 12小时制的小时
System.out.println(c1.get(Calendar.HOUR_OF_DAY)); // 24小时制的小时
System.out.println(c1.get(Calendar.MINUTE)); // 分
System.out.println(c1.get(Calendar.SECOND)); // 秒
System.out.println(c1.get(Calendar.DAY_OF_WEEK)); // 星期几 注意星期日是 1
System.out.println(c1.getTime()); //获取时间
System.out.println(c1.getTimeInMillis()); //获取时间值,以毫秒为单位
c1.add(Calendar.YEAR,1); //根据时间字段去运算,若设置的是天数,则月份受会其可能变化 roll则是单单那个值会变化,也就是其他都是固定了的。
System.out.println(c1.getTime());
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.YEAR,1); //设置日期
System.out.println(c2.getTime());
System.out.println(c2.compareTo(c1)); //比较时间
}
/**
* 获取当月的 天数
*
*/
public static int getCurrentMonthDay()
{
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
/**
* 根据 年、月 获取对应的月份 的 天数
*/
public static int getDaysByYearMonth(int year, int month)
{
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}