Java学习笔记(六)——基本数据类型及其对应的包装类

news2024/10/5 16:00:18

文章目录

    • 包装类
      • 基本数据类型及其对应的包装类
      • 获取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);  //10
        System.out.println(i1);  //123
        System.out.println(i2);  //10
        System.out.println(i3);  //145
        System.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);  //false

        Integer i3=new Integer(128);
        Integer i4=new Integer(128);

        System.out.println(i3==i4);  //false

        Integer i5=Integer.valueOf(127);
        Integer i6=Integer.valueOf(127);

        System.out.println(i5==i6);  //true

        Integer 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;
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10本医护升职称可用的医药普刊推荐,参数大全!

医、药、护、技及医学工程等相关的人员&#xff0c;进行卫生高级职称评审时&#xff0c;需要在专业期刊上公开发表本专业学术论文&#xff0c;论文的方向、内容质量以及发表的刊物都至关重要。今天常笑医学给大家整理了10本不错的医药普刊&#xff0c;供大家参考&#xff01; 1…

x-cmd pkg | busybox - 嵌入式 Linux 的瑞士军刀

目录 简介首次用户功能特点竞品和相关作品 进一步阅读 简介 busybox 是一个开源的轻量级工具集合&#xff0c;集成了一批最常用 Unix 工具命令&#xff0c;只需要几 MB 大小就能覆盖绝大多数用户在 Linux 的使用&#xff0c;能在多款 POSIX 环境的操作系统&#xff08;如 Linu…

普中STM32-PZ6806L开发板(有点悲伤的故事续-人灯还未了)

简介 继上篇 普中STM32-PZ6806L开发板(有点悲伤的故事) 说到 关于 普中STM32-PZ6806L开发板的LED流水灯也被烧坏掉了&#xff0c;再也无法玩流水灯, 内心充满了只会流水灯的不甘, 流水灯就是单片机的Hello World&#xff0c;怎么能没有呢&#xff1f; 事情发展 好巧不巧想起最近…

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…

Spring——基于注解的AOP控制事务

基于注解的AOP控制事务 1.拷贝上一次代码 2.applicationContext.xml <!-- 开启spring对注解事务的支持 --> <tx:annotation-driven transaction-manager"transactionManager"/> 3.service Service Transactional(readOnlytrue,propagation Propagatio…

RT_Thread 调试笔记:时间相关,时钟管理函数,延时,定时器、 毫秒转换为时分秒 等

说明&#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中&#xff0c;欢迎收藏。 1. 延时函数 1. us延时函数 rt_hw_us_delay(rt_uint32_t us);//输如数据是us rt_hw_us_delay(200);//输入数据是us 2. ms延时函数 rt_thread_mdelay(1000);//输入数据是ms 2…

Android Matrix (二)具体图形变换参数的获取

Android Matrix &#xff08;二&#xff09;具体图形变换参数的获取 Matrix 类在 Android 中用于表示 3x3 的变换矩阵。这个矩阵可以应用于画布&#xff08;Canvas&#xff09;&#xff0c;视图&#xff08;View&#xff09;或者位图&#xff08;Bitmap&#xff09;&#xff0…

C#设计模式之单例模式

介绍 单例模式&#xff08;Singleton&#xff09;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 单例模式的结构图如下所示&#xff1a; 使用单例模式的原因 对一些类来说&#xff0c;只有一个实例是很重要的。如何才能保证一个类只有一个实例并且这个…

【JAVA】Iterator 怎么使用?有什么特点

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 Iterator 接口的主要方法&#xff1a; 例子 特点&#xff1a; 结语 我的其他博客 前言 在编程的世界里&#xff0c;迭代…

【QML COOK】- 000-创建Project

1. 文件->New Project... 2. Application(Qt)->Qt Quick Application(compat) 3. 填好【名称】和【创建路径】 4. 选择CMake 5. 选择QT6.2 6. 直接【下一步】 7. 直接下一步 8. 直接下一步 9. 出现工程文件 10. 点击运行 11. 出现窗口

npm报错error:03000086:digital envelope routines::initialization error

可能是因为node版本过高&#xff0c;与现在的项目不符合 这是降低node版本的命令&#xff0c;然后重新运行 npm install npm8.1.2 -g

张留念瞰游天下总经理与汤加政府签署合作备忘 将于2024年隆重启动

汤加是南太平洋上一个美丽的岛国&#xff0c;是南太平洋唯一维持君主立宪制的国家&#xff0c;全国由173个海岛组成&#xff0c;海洋、海岛旅游资源丰富&#xff0c;是个原生态的旅游胜地。 中汤两国建交25年以来&#xff0c;两国政府高级官员和代表团互访频繁&#xff0c;在政…

【源码预备】Calcite基础知识与概念:关系代数概念、查询优化、sql关键字执行顺序以及calcite基础概念

文章目录 一. 关系代数的基本知识二. 查询优化三. SQL语句的解析顺序1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT 四. Apache Calcite中的基本概念1. Adapter2. Calcite中的关系表达式2.1. 关系表达式例子2.2. 源码底层结构 3. Calcite的优化规则4. Calcite的Trait--算子物理…

自动挡的闪300?QJ要做第一个吃螃蟹的人了?

其实在发布会当天&#xff0c;有一台车在现场热度是比赛921还高的&#xff0c;因为四缸大跑车大家可能都见多了&#xff0c;而QJ带来一台自动挡的闪300&#xff0c;这个自动挡其实是需要加个引号的&#xff0c;因为升档的时候是需要你按一下手把上的按键的&#xff0c;有点类似…

设计模式的艺术P1基础—2.4-2.11 面向对象设计原则

设计模式的艺术P1基础—2.4-2.11 面向对象设计原则 2.4 面向对象设计原则概述 向对象设计的目标之一在于支持可维护性复用&#xff0c;一方面需要实现设计方案或者源代码的重用&#xff0c;另一方面要确保系统能够易于扩展和修改&#xff0c;具有较好的灵活性。 面向对象设计…

基于Java SSM框架实现实现机房预约系统项目【项目源码+论文说明】

基于java的SSM框架实现机房预约系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

这款Web剪藏工具绝了,支持10+平台内容剪辑同步!

前言 Web Clipper 是一个开源项目&#xff0c;旨在帮助用户轻松地保存和组织网页内容。它可以作为浏览器插件安装到常见的浏览器中&#xff0c;如Chrome、Firefox 等&#xff0c;用户可以使用它来保存网页、截取文章、添加标签和注释等操作&#xff0c;从而方便地管理和分享自…

[VUE]4-状态管理vuex

目录 状态管理 vuex 1、vuex 介绍 2、安装 3、使用方式 4、总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Python人工智…

20240108移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通的步骤

20240108移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通的步骤 2024/1/8 17:50 缘起&#xff1a;使用友善之臂的Android11可以让EC20上网&#xff0c;但是同样的修改步骤&#xff0c;Toybrick的Android11不能让EC20上网。最后确认是selinux的问题&#xff01; …

亲测有效:腾讯云免费服务器30天申请流程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…