1.自动装箱和自动拆箱
自动装箱:
基本类型就自动的封装到与它相同类型的包装中:如:
创建一个对象时:Integer i = 100;
本质上是编译器编译时为我们添加了:
Integer i = new Integer(100);
自动拆箱:
包装类对象自动转换成基本类型数据,如:
int a = new Integer(100);
本质上,编译器为我们添加了:
int a = new Integer(100).intValue();
此类中的方法中的缓存问题
[-128, 127]之间的数,仍然被当做基本类型处理,由于基本类型的处理要比其他方式快一些,所有这个范围内的数据不做改变
1 /** 2 * Created by cenyu on 16-11-17. 3 * 测试自动装箱和拆箱 4 */ 5 public class AutoBoxing { 6 public static void main(String[] args) { 7 //自动装箱 8 Integer a = new Integer(100); //这是原本创建一个a 对象,并传值100 9 Integer a1 = 100; //这是自动装箱,效果等同上面。jdk5.0之后才有, 10 // 本质是编译器会帮我们改进代码成:Integer a1 = new Integer(100); 11 12 //自动拆箱 13 int b = new Integer(1500).intValue(); //正常操作,定义了一个int对象a 14 int c = new Integer(1500); //自动拆箱,定义一个int对象c, 15 // 本质上是编译器帮我们改进代码为:int b = new Integer(1500).intValue(); 16 17 18 //产生的缓存问题 19 //1.比较两个对象,没有缓存问题 20 Integer s1 = 1234; 21 Integer s2 = 1234; 22 System.out.println(s1==s2); //false, 因为利用了装箱的功能,所有实际是创建了两个类, 23 System.out.println(s1.equals(s2)); //true, 这两个类的值相等 24 25 //2.再次比较,出现缓存问题 26 Integer x1 = 123; 27 Integer x2 = 123; 28 System.out.println(x1==x2);//true,原因是[-128,127]之间的数,仍然被当做基本数据类型来处理 29 System.out.println(x1.equals(x2));//true 30 31 } 32 }
2.时间类java.util.Date
1.Date类的对象表示一个特定瞬间,精确到毫秒
2.java中的时间也是数字,他是从:标准纪元;1970.1.1.0点开始到某个时刻的毫秒数,类型是long
2.1.date类中的几个常用方法
1 import java.util.Date; 2 /** 3 * 测试时间类的用法 4 * Created by cenyu on 16-11-17. 5 */ 6 public class TestDate { 7 public static void main(String[] args) { 8 Date d = new Date();//什么参数都不传,表示当前时间 9 Date d2 = new Date(1000); //1 Jan 1970 00:00:01 GMT //传入一个long类型,表示以基本纪元为起点,往后1000个时间点,即往后1秒钟 10 d2.setTime(2000);//重新设置参数 11 System.out.println(d); 12 System.out.println(d2.toGMTString()); 13 } 14 }
2.2.DateFormat和SimpleDateFormat类
作用:完成字符串和时间对象的转化
format:时间转化为字符串
parse:字符串转化为时间
1 import java.text.DateFormat; 2 import java.text.ParseException; 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 /** 7 * 测试时间转化为字符串,和字符串转化为时间 8 * Created by cenyu on 16-11-17. 9 */ 10 public class TestDateFormat { 11 public static void main(String[] args) throws ParseException { 12 //把时间转化为字符串,format 13 //创建类的时候不能new一个抽象类,可以new他的一个子类 //创建一个时间格式化对象 14 DateFormat df = new SimpleDateFormat("yyy-MM-dd hh:mm:ss"); 15 //创建一个时间对象 16 Date d = new Date(123213123L); 17 String str = df.format(d);//将时间对象按照格式化字符串,转化为字符串 18 System.out.println(str); //1970-01-02 06:13:33 19 20 //把字符串格式化一个时间对象,parse 21 String str2 = "1977-7-7"; 22 DateFormat df2 = new SimpleDateFormat("yy-MM-dd"); 23 try { 24 Date d2 = df2.parse(str2); 25 System.out.println(d2);//Thu Jul 07 00:00:00 CST 1977 26 } catch (ParseException e) { 27 e.printStackTrace(); 28 } 29 30 } 31 }
2.3.日历类Calendar
通过Calendar把日期和loong类型的数字链接起来,时相互转化
GregorianCalendar公历
这个类是Calendar类的一个具体子类,提供了绝大多数地区的标准日历系统
需要注意:
1.月份从0开始,1月是0,12月是11
星期:周日是1,周一是2,周六是7
1 import java.util.Calendar; 2 import java.util.Date; 3 import java.util.GregorianCalendar; 4 5 /** 6 * 测试日期类 7 * Created by cenyu on 16-11-17. 8 */ 9 public class TestCalendar { 10 public static void main(String[] args) { 11 Calendar c = new GregorianCalendar(); 12 c.set(Calendar.YEAR,2003); //设置一个年份,没有设置的默认是当前的日期数据 13 // c.set(2001,1,10,23,24,59); //设置一个时间 14 c.add(Calendar.YEAR,3);//年份上再加3年 15 Date d = c.getTime(); //获取时间 16 System.out.println(d); 17 System.out.println(c.get(Calendar.YEAR)); //2003+3获取设置的年份 18 } 19 }