文章目录
- 包装类
- 基本数据类型及其对应的包装类
- 获取Integer对象的方式(了解)
- 获取Integer对象两种方式的区别(掌握)
- 包装类的计算:自动装箱和自动拆箱
- Integer成员方法
- 综合练习
- 练习1
- 练习2
- 练习3
- 练习4
- 练习5
包装类
包装类:基本数据类型对应的引用数据类型。
集合无法存储基本数据类型,需要用到包装类。
基本数据类型及其对应的包装类
获取Integer对象的方式(了解)
public class test30 {public static void main(String[] args) {Integer i0 = new Integer(10);Integer i1 = new Integer("123");Integer i2 = Integer.valueOf(10);Integer i3 = Integer.valueOf("145");Integer i4 = Integer.valueOf("110", 2);System.out.println(i0); //10System.out.println(i1); //123System.out.println(i2); //10System.out.println(i3); //145System.out.println(i4); //6}
}
获取Integer对象两种方式的区别(掌握)
public class test31 {public static void main(String[] args) {Integer i1=new Integer(127);Integer i2=new Integer(127);System.out.println(i1==i2); //falseInteger i3=new Integer(128);Integer i4=new Integer(128);System.out.println(i3==i4); //falseInteger i5=Integer.valueOf(127);Integer i6=Integer.valueOf(127);System.out.println(i5==i6); //trueInteger i7=Integer.valueOf(128);Integer i8=Integer.valueOf(128);System.out.println(i7==i8); //false}
}
注意:==比较的是地址。
查看源码:
IntegerCache.low=-128,IntegerCache.high=127
会先创建【-128-127】的Integer对象放进cache数组,因为实际开发中【-128~127】的数据用的比较多
包装类的计算:自动装箱和自动拆箱
在JDK5的时候提出了一个机制:自动装箱和自动拆箱。
自动装箱:把基本数据类型自动变成其对应的包装类。
自动拆箱:把包装类自动变成其对应的基本数据类型。
public class test32 {public static void main(String[] args) {//自动装箱Integer i=10;//自动拆箱Integer i1=Integer.valueOf(20);int i2=i1;}
}
Integer成员方法
public class test32 {public static void main(String[] args) {Integer i=10;String binaryString = Integer.toBinaryString(i);String octalString = Integer.toOctalString(i);String hexString = Integer.toHexString(i);String str="123";int i1 = Integer.parseInt(str);}
}
注意:Java是强类型语言,不同数据类型的数据无法直接计算;8种包装类,只有Character没有parseXXX方法。
综合练习
练习1
键盘录入一些1~10日之间的整数,并添加到集合中。直到集合中所有数据和超过200为止。
import java.util.ArrayList;
import java.util.Scanner;public class test33 {public static void main(String[] args) {//键盘录入一些1~100之间的整数,并添加到集合中。直到集合中所有数据和超过200为止。Scanner sc = new Scanner(System.in);ArrayList<Integer> arrayList = new ArrayList<>();while (true) {String str = sc.nextLine();int in = Integer.parseInt(str);if (in > 100 || in < 0) {System.out.println("非法数据!请输入1~100之间的整数:");continue;}arrayList.add(in);if(sum(arrayList)>200){break;}}}public static int sum(ArrayList<Integer> arrayList) {int sum = 0;for (int i = 0; i < arrayList.size(); i++) {sum += arrayList.get(i);}return sum;}
}
练习2
实现parseInt方法的效果,将字符串形式的数据转成整数。
要求:字符串中只能是数字不能有其他字符,最少一位,最多10位,0不能开头
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test34 {public static void main(String[] args) {//实现parseInt方法的效果,将字符串形式的数据转成整数。要求:字符串中只能是数字不能有其他字符最少一位,最多10位,0不能开头Scanner sc = new Scanner(System.in);System.out.println("请输入:");while (true) {String str = sc.nextLine();boolean flag = isCharacter(str);if (!flag) {System.out.println("非法输入!");} else if (str.length() > 10) {System.out.println("非法输入!");} else {int sum=0;int k=1;for(int i=0;i<str.length();i++){sum=sum*10+(str.charAt(i)-'0');}System.out.println(sum);}}}public static boolean isCharacter(String str) {String regex = "[1-9]\\d{0,9}";return str.matches(regex);}
}
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test34 {public static void main(String[] args) {//实现parseInt方法的效果,将字符串形式的数据转成整数。要求:字符串中只能是数字不能有其他字符最少一位,最多10位,0不能开头Scanner sc = new Scanner(System.in);System.out.println("请输入:");while (true) {String str = sc.nextLine();boolean flag = isCharacter(str);if (!flag) {System.out.println("非法输入!");} else if (str.length() > 10) {System.out.println("非法输入!");} else {int sum=0;int k=1;for (int i = str.length()-1; i>=0; i--) {//System.out.println(str.charAt(i));sum+=(str.charAt(i)-'0')*k;k=k*10;}System.out.println(sum);}}}public static boolean isCharacter(String str) {String regex = "[1-9]\\d{0,9}";return str.matches(regex);}
}
练习3
定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制
import java.util.ArrayList;
import java.util.Scanner;public class test35 {public static void main(String[] args) {//定义一个方法自己实现toBinaryString方法的效果,将一个十进制整数转成字符串表示的二进制Scanner sc=new Scanner(System.in);while (true){int i=sc.nextInt();System.out.println(toBinaryString(i));}}public static String toBinaryString(int i){String str="";ArrayList<Integer> arrayList=new ArrayList<>();int k; //余数while(i!=0){k=i%2;arrayList.add(k);i=i/2;}for(int j=arrayList.size()-1;j>=0;j--){str=str+arrayList.get(j);}return str;}
}
练习4
请使用代码实现计算活了多少天,用JDK7和JDK8两种方式完成
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Pattern;public class test36 {public static void main(String[] args) throws ParseException {//请使用代码实现计算活了多少天,用JDK7和JDK8两种方式完成Scanner sc = new Scanner(System.in);System.out.println("请输入生日:(格式 yyyy-MM-dd)");while (true) {String str = sc.nextLine();if(str.matches("\\d{1,4}(-)(1[0-2]|0?[1-9])\\1(0?[1-9]|[1-2]\\d|30|31)")){System.out.println("JDK7:" + JDK7(str) + "天");System.out.println("JDK8:" + JDK8(str) + "天");}else {System.out.println("非法输入!");}}}public static long JDK7(String str) throws ParseException {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(str);Date now=new Date();long time=now.getTime()-date.getTime();return time/(1000*24*60*60);}public static long JDK8(String str) {LocalDateTime now=LocalDateTime.now(ZoneId.of("Asia/Shanghai"));String[] split = str.split("-");LocalDate localDate=LocalDate.of(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2]));return ChronoUnit.DAYS.between(localDate,now);}}
练习5
判断任意的一个年份是闰年还是平年要求:用JDK7和JDK8两种方式
闰年判断:
二月有29天是闰年/一年有366天是闰年
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;public class test38 {public static void main(String[] args) throws ParseException {//判断任意的一个年份是闰年还是平年要求:用JDK7和JDK8两种方式判断提示:二月有29天是闰年一年有366天是闰年Scanner sc = new Scanner(System.in);System.out.println("请输入日期:(格式 yyyy-MM-dd)");while (true) {String str = sc.nextLine();if (str.matches("\\d{1,4}(-)(1[0-2]|0?[1-9])\\1(0?[1-9]|[1-2]\\d|30|31)")) {if (JDK7(str)) {System.out.println("JDK7:");System.out.println("输入的年份是闰年!");} else {System.out.println("输入的年份是平年!");}if (JDK8(str)) {System.out.println("JDK8:");System.out.println("输入的年份是闰年!");} else {System.out.println("输入的年份是平年!");}} else {System.out.println("非法输入!");}}}public static boolean JDK7(String str) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(str);Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.MONTH, 2); //把日期设置成3月1日calendar.set(Calendar.DAY_OF_MONTH,1);calendar.add(Calendar.DAY_OF_MONTH,-1); //把日期减1天,看看是几号int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println(day);if (day == 29) {return true;} else {return false;}}public static boolean JDK8(String str) {String[] split = str.split("-");LocalDate localDate = LocalDate.of(Integer.parseInt(split[0]),3,1); //把日期设置成3月1日LocalDate localDate1 = localDate.minusDays(1); //把日期减1天,看看是几号int day = localDate1.getDayOfMonth();System.out.println(day);if (day == 29) {return true;} else {return false;}}
}
闰年判断:
(1)四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。
(2)每四百年再一闰:如果year能够被400整除,则year是闰年。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;public class test37 {public static void main(String[] args) throws ParseException {//判断任意的一个年份是闰年还是平年要求:用JDK7和JDK8两种方式判断提示:二月有29天是闰年一年有366天是闰年Scanner sc = new Scanner(System.in);System.out.println("请输入日期:(格式 yyyy-MM-dd)");while (true) {String str = sc.nextLine();if (str.matches("\\d{1,4}(-)(1[0-2]|0?[1-9])\\1(0?[1-9]|[1-2]\\d|30|31)")) {if(JDK7(str)){System.out.println("JDK7:");System.out.println("输入的年份是闰年!");}else {System.out.println("输入的年份是平年!");}if(JDK8(str)){System.out.println("JDK8:");System.out.println("输入的年份是闰年!");}else {System.out.println("输入的年份是平年!");}} else {System.out.println("非法输入!");}}}public static boolean JDK7(String str) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(str);Calendar calendar = Calendar.getInstance();calendar.setTime(date);int year = calendar.get(Calendar.YEAR);//闰年://(1)四年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。//(2)每四百年再一闰:如果year能够被400整除,则year是闰年。if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {return true;} else {return false;}}public static boolean JDK8(String str) {String[] split = str.split("-");LocalDate localDate=LocalDate.of(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2]));int year = localDate.getYear();if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {return true;} else {return false;}}
}