首页 > 其他分享 >Day5之,原来数据类型还有这么多知识点

Day5之,原来数据类型还有这么多知识点

时间:2024-04-01 17:34:31浏览次数:19  
标签:知识点 转换 int Day5 数据类型 System println public out

Day5数据类型扩展知识

关于数据类型的拓展知识

  • 二进制数是在数字前加上0b,八进制是加上0,十六进制是加上0x
public static void main(String[] args) {
        //整数拓展 进制 二进制0b、八进制0、十六进制0x

        int i = 10;
        int i2 = 010;//八进制
        int i3 = 0x10;//十六进制

        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3); = 10_0000_0000;//数字中可以用下划线分割
    int years = 20

结果:image-20240401163223386

  • 浮点数的拓展:

    浮点数本身存在限额,且自带舍入误差,所以看上去相等其实不相等,看上去不等也许计算出会相等

    如以下计算

    
            float f =0.1f;
            double d = 1.0/10;
            //两者理应都是0.1
            System.out.println(f==d);//显示false,证明并不相等,两个等号是计算相等
            System.out.println(f);
            System.out.println(d);
    
            float d1 = 456564416516525f;
            float d2 = d1+1;
            System.out.println(d1==d2);//显示true
    

    结果:

    image-20240401163633662

    1. f=d显示false,虽然两者看起来都是0.1,但是这个实数却不是跟我们所想的计算一样,而是通过别的计算来获得一个近似的实数(具体的我也不是看得很懂所以就不写了),总之真实的数字不是像我们所看到的那样,隐藏的数字也因此获得了精度的限制,看起来都是0.1,但是其实float和double计算出了两个完全不同的数字,因此两者不会相等。

    2. d1=d2,则是因为浮点数的离散和舍入误差的特征,虽然加了1,但是在后续的计算中又舍掉了,导致最后输出的依旧是这个值,而这里同处在一个数据类型下计算,所以不存在精度不同的问题。

      image-20240401164602223

    3. 综上所述,使用浮点数作比较会有诸多限制,所以,不如不用!

  • 字符串的拓展,其实就是字符本身是Unicode的编码,占两个字节,且自身都有编号,在U0000-UFFFF之间,可以通过强制转换转换成数字:

    char c1 = 'a';
            char c2 = '中';
    
    
            System.out.println(c1);
            System.out.println((int)c1);//强制转换
    
            System.out.println(c2);
            System.out.println((int)c2);
    

    结果:image-20240401165126304

    即,“a”的值为97,而“中”的值为20013,此外宋的值是“23435”

  • java中存在转译字符,即使用特定字符表示符号如

     //转译字符
            // \t(空格) ---制表符
            // \n(换行)
            //more...
    
            System.out.println("hello\nworld");
    

    结果image-20240401165605435

  • 布尔值中的拓展

    在java的布尔值判断格式中

      boolean flag = true;
    if (flag){}
    if (flag==true){}
    
    

    两个if后面的代码是一模一样的,按时显然前者更精简,还是使用前一个比较好。

关于数据类型转换

java是强类型语言,必须保证数据类型相同才能进行下一步,因此会经常进行数据类型的转换

java中的数据类型存在高低之分

byte、short、char<int<long<float<double

可见位越多则越高,此外浮点数总是先于整数

1.数据转换的类型

java中主要有两种类型的数据转换

  • 强制转换

    即从高到低必须进行强制数据转换

    public class demo1 {
        public static void main(String[] args) {
            int i = 126;
            byte b = ((byte)i);//byte最大到127,到128就会出问题,内存溢出
    
            //强制转换是改变类型和变量名
    
            System.out.println(i);
            System.out.println(b);
    

    结果是

    image-20240401171016289

  • 自动转换

    即由低到高是自动转换,无需变化

    public class demo1 {
        public static void main(String[] args) {
            int i = 126;
            double b = i;
    

    结果为:

    image-20240401171253649

  • 在强制转换中,如果超过限额,就会出现内存溢出情况,如上面的第一个byte的值大于127,则会出现错误,比如:

    public class demo1 {
        public static void main(String[] args) {
            int i = 128;
            byte b = ((byte)i);
    

    结果是:

    image-20240401171551592

2.数据转换的注意事项

  • 无法对布尔值进行计算(true or false)

  • 不能把对象类型转换为完全安全不相干的类型

  • 在大容量向小容量转换时要强制转换

  • 转换有可能出现内存溢出(上文提到)和小数点精度问题

    如下面的案例

     System.out.println((int)23.7);//double
            System.out.println((int)-45.89f);//float
    

    结果为

    image-20240401172040997

  • 此外字符也可以转换(本质上是编码)

    如:

    char c ='a';
            int d = c+1;
            System.out.println(d);
            System.out.println((char)d);
    

    结果为:

    image-20240401172232568

  • 较大的数据转换要注意一些问题,我全写代码里了:

    public class demo2 {
        public static void main(String[] args) {
            //操作较大的数字要注意内存溢出
            int money = 10_0000_0000;//数字中可以用下划线分割(jdk7的新功能)
            int years = 20;
            int total = money*years;
            System.out.println(total);
            //输出了一个负数,证明内存溢出
            //试试看long?
            long total2 = money*years;
            System.out.println(total2);
            //还是这个数字,因为两个int最后还int,在转换前就已经是错误数字,所以即便使用long也没有用
            //尝试一下用类型转换解决这个问题
            System.out.println("----------------------------");
            long total3 = ((long)money)*years;
            long total4 = money*((long)years);
            System.out.println(total3);
            System.out.println(total4);
            //都显示出正常的数字,说明只要在过程中转换其中一个,就可以全部提升到long,解决极限问题
            //尽量用大写的L,不然容易看成1
    

    以上的输出结果为

    image-20240401172504103

    ps:注意long中的L表示要用大写,不然容易看成1.

标签:知识点,转换,int,Day5,数据类型,System,println,public,out
From: https://www.cnblogs.com/iwanttoberipped/p/18108985

相关文章

  • 循环语句+数据类型的内置方法(数字,字符串)
    今日大纲while循环continuebreak要避免死循环,会造成CPU占用标志位:tag,类似于break的效果,但是多层while嵌套时,break只能退出本层循环,tag就可以定义到任意层。tag=Truewhiletag: if....: tag=Falsefor循环用来遍历可迭代类型(能索引取值的数据类型,只......
  • [Python]知识点
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18031984出自【进步*于辰的博客】注:本文可能不适合0-Python基础的博友,因为对于各类知识点,我阐述的宗旨是“阐明使用细节”,而不是基础知识。目录1、其他知识点链接2、pip......
  • 【Redis】快速入门 数据类型 常用指令 在Java中操作Redis
    文章目录一、简介二、特点三、下载与安装四、使用4.1服务器启动4.2客户端连接命令4.3修改Redis配置文件4.4客户端图形化界面五、数据类型5.1五种常用数据类型介绍5.2各种数据类型特点六、常用命令6.1字符串操作命令6.2哈希操作命令6.3列表操作命令6.4集合操......
  • 2.python 基本数据类型
    #python基本数据类型#python中等号用来给变量赋值counter=100#整形变量miles=1000.0#浮点型变量name="runoob"#字符串print(counter)print(miles)print(name)#python允许同时为多个变量赋值a=b=c=1print(a)print(b)print(c)#为多个对......
  • 3.python 数据类型转换
    #python数据类型转换"""python数据类型转换可以分为两种:隐式类型转换-自动完成显示类型转换-需要使用类型函数来转换"""#隐式类型转换(自动类型转换)#隐式类型转换中,python会自动将一种数据类型转换为另一种数据类型。#转换规则:低精度向高精度转换(bool->int->......
  • Java(2)之变量,数据类型,运算符
    1、标识符在java中标识符是由字母数字下划线,美元符号组成(其中数字没办法作首)在java中是区分大小写的。2、关键字关键字是在java中赋予了特殊的含义的字符,只能用于特定地方例如包package类class接口interface引用:this,supe,创建对象:new等等关键字引用需要注意大小写,且......
  • Java-数据类型
    前言:本文主要讲述八大数据类型以及使用规范,最后对知识进行一个拓展。强类型语言要求变量使用要严格符合规定,所有变量都必须先定义后才能使用弱类型语言基本类型(primitivetype)引用类型(referencetype)*不规范的*规范的*如下面这种定义变量是可以成功:*注意事项:......
  • pink前端--小知识点汇总 练手小案例
    一 用子绝夫相定位模式:当鼠标经过时出现遮罩层1.1代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><......
  • C语言02-常量、二进制、数据类型
    第4章常量1.常量特点程序运行时,其值不能改变的量,即为常量。2.常量分类字面量常量标识符常量3.常量定义方式(标识符常量)①#define宏定义②const关键字(C99标准增加)4.两种定义方式区别类型检查:const编译阶段会进行类型检查,#define方式不......
  • 02-常量、二进制、数据类型
    第4章常量1.常量特点程序运行时,其值不能改变的量,即为常量。2.常量分类字面量常量标识符常量3.常量定义方式(标识符常量)①#define宏定义②const关键字(C99标准增加)4.两种定义方式区别类型检查:const编译阶段会进行类型检查,#define方式不......