文章目录

  • 0.思维导图总览
  • 1.整型
  • 2.浮点型
  • 3.char型
  • 4.boolean型
  • 5.java内置常量对应数据类型的取值范围
  • 6.数据类型默认值
  • 7.数值类型之间的转换
    • (1)定义数据类型后自动转换
    • (2)二元运算时的自动转换
    • (3)强制类型转换
  • 8.参考

本篇文章已收录到:https://www.bithachi.cn/posts/abf8abd7.html

0.思维导图总览

1.整型

  • 整型用于表示没有小数部分的数值, 它允许是负数。默认的整型为int型
  • byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用
    存储空间量的大数组。
  • 在 Java 中, 整型的范围与运行 Java 代码的机器无关。这就解决了软件从一个平台移植到
    另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。
  • 长整型数值有一个后缀 L 或 l ( 如 4000000000L。)
  • 十六进制数值有一个前缀 0x 或 0X (如0xCAFEL
  • 八进制有一个前缀 0 , 例如, 010 对应八进制中的 8。
  • 很显然, 八进制表示法比较容易混淆, 所以建议最好不要使用八进制常数。
  • 从 Java 7 开始, 加上前缀 0b 或 0B 就可以写二进制数。例如,0bl001就是 9。
  • 从 Java 7 开始,还可以为数字字面量加下划线,如用 1_000_000(或者0b1111_0100_0010_10 00_0000 )表示一百万。这些下划线只是为了让人更易读。·Java 编译器会去除这些下划线
  • 在 Java 中, 所有的数值类型所占据的字节数量与平台无关。
  • 注意: Java 没有任何无符号(unsigned) 形式的 int、 long、short 或 byte 类型。
  • 代码测试
public class Test {public static void main(String[] args) {// 十六进制  0x或0X都可行int a0 = 0xa0;  // a0的十进制值为160short b0 = 0Xa0;long c0 = 0xa0;byte d0 = 0X10; // 10对应十进制16,不能用0xa0因为超过了byte数值范围System.out.println(a0 + "  " + b0 + "  " + c0 + "  " + d0);// 八进制  0开头int a1 = 010; // 10的十进制为8short b2 = 010;long c2 = 010;byte d2 = 010;System.out.println(a1 + "  " + b2 + "  " + c2 + "  " + d2);//二进制  0b或0B都行int a3 = 0b100; // 100十进制的值为4short b3 = 0B100;long c3 = 0B100;byte d3 = 0b100;System.out.println(a3 + "  " + b3 + "  " + c3 + "  " + d3);long long1 = 100;long long2 = 100l;long long3 = 100L;System.out.println(long1 + "  " + long2 + "  " + long3);//从结果可以看出不加l或L对结果无影响//当数值超过int的范围时必须加上L//可以为数字字面量加下划线,Java 编译器会去除这些下划线int a4 = 1____00___00;short b4 = 2_0_3_0;long c4 = 19____00;byte d4 = 10_1;System.out.println(a4 + "   " + b4 + "   " + c4 + "   " + d4);}
}

2.浮点型

  • 浮点类型用于表示有小数部分的数值,默认的浮点型为double型
  • double 表示这种类型的数值精度是 float 类型的两倍(有人称之为双精度数值)
  • 实际上,只有很少的情况适合使用 float 类型,例如,需要单精度数据的库, 或者需要存储大量数据。
  • float 类型的数值有一个后缀 F 或 f (例如,3.14F。) 没有后缀 F 的浮点数值(如 3.14 ) 默认为 double 类型。
  • 当然,也可以在浮点数值double后面添加后缀 D 或 d (例如,3.14D),不加也可以。
  • 可以使用十六进制表示浮点数值。例如,0.125=2-3 可以表示成 0x1.0p-3。在十六进制表示法中, 使用 p 表示指数, 而不是 e。 注意, 尾数采用十六进制,指数采用十进制。指数的基数是 2,而不是 10。 对于十六进制表示我没怼出来,还请大佬多多指教,留个言教教我,抱拳了!
  • 所有的浮点数值计算都遵循 IEEE 754 规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
    •正无穷大
    •负无穷大
    •NaN (不是一个数字)
    例如, 一 正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。
    常量 Double.POSITIVE_INFINITY、 Double.NEGATIVE_INFINITY 和 Double.NaN
    ( 以及相应的 Float 类型的常量) 分别表示这三个特殊的值, 但在实际应用中很少遇到。
  • 特别要说明的是, 不能这样检测一个特定值是否等于Double.NaN:
if (x = Double.NaN) // is never true
  • 所有“ 非数值” 的值都认为是不相同的。然而,可以使用 Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is "not a number"
  • 浮点数值不适用于无法接受舍入误差的金融计算中

  • 例如,命令 System.out.println( 2.0-1.1 ) 将打印出 0.8999999999999999, 而不是人们想象的 0.9。

  • 这种舍入误差的主要原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。 这就好像十进制无法精确地表示分数 1/3—样。

  • 如果在数值计算中不允许有任何舍入误差,就应该使用 BigDecimal类

  • 代码测试

public class Test {public static void main(String[] args) {float a = 100.111f;float b = 100.111F;double c = 100.111;double d = 100.111D;double e = 100.111d;System.out.println(a + "   " + b + "   " + c + "   " + d + "   " + e);System.out.println(Double.POSITIVE_INFINITY);System.out.println(Double.NEGATIVE_INFINITY);System.out.println(Double.NaN);}
}

3.char型

  • char 类型原本用于表示单个字符。不过,现在情况已经有所变化。 如今,有些 Unicode
    字符可以用一个 char值描述,另外一些 Unicode 字符则需要两个 char 值。
  • char 类型的字面量值要用单引号括起来。
  • char a=’’,什么都不写报错,可以存个空格。
  • char 类型的值可以表示为十六进制值,其范围从 \u0000 到 \Uffff。例如: \u03C0 表示希腊字母 π。
  • 除了转义序列 \u 之外, 还有一些用于表示特殊字符的转义序列。所有这些转义序列都可以出现在加引号的字符字面量或字符串中。例如,’\u2122’ 或 “Hello\n”。
  • 转义序列 \u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以)。例 如:
public static void main(String\u005B\ u00SD args)

就完全符合语法规则, \u005B 和 \u005D 是 [ 和 ] 的编码



代码测试:

public class Test {public static void main(String[] args) {//   \u000A   asdasda// Look inside c:\users}
}

  • 抱着玩的兴趣测试了一下\u转义序列
  • Unicode转义字符序列的官网 http://www.52unicode.com/

4.boolean型

  • boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件 整型值和布尔值之间
    不能进行相互转换。

5.java内置常量对应数据类型的取值范围

public class Test {public static void main(String[] args) {// byteSystem.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);System.out.println("包装类:java.lang.Byte");System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);System.out.println();// shortSystem.out.println("基本类型:short 二进制位数:" + Short.SIZE);System.out.println("包装类:java.lang.Short");System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);System.out.println();// intSystem.out.println("基本类型:int 二进制位数:" + Integer.SIZE);System.out.println("包装类:java.lang.Integer");System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);System.out.println();// longSystem.out.println("基本类型:long 二进制位数:" + Long.SIZE);System.out.println("包装类:java.lang.Long");System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);System.out.println();// floatSystem.out.println("基本类型:float 二进制位数:" + Float.SIZE);System.out.println("包装类:java.lang.Float");System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);System.out.println();// doubleSystem.out.println("基本类型:double 二进制位数:" + Double.SIZE);System.out.println("包装类:java.lang.Double");System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);System.out.println();// charSystem.out.println("基本类型:char 二进制位数:" + Character.SIZE);System.out.println("包装类:java.lang.Character");// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台System.out.println("最大值:Character.MAX_VALUE="+ (int) Character.MAX_VALUE);}
}

6.数据类型默认值

public class Test {static boolean bool;static byte by;static char ch;static double d;static float f;static int i;static long l;static short sh;static String str;public static void main(String[] args) {System.out.println("Bool :" + bool);System.out.println("Byte :" + by);System.out.println("Character:" + ch);System.out.println("Double :" + d);System.out.println("Float :" + f);System.out.println("Integer :" + i);System.out.println("Long :" + l);System.out.println("Short :" + sh);System.out.println("String :" + str);}
}

7.数值类型之间的转换

(1)定义数据类型后自动转换

  • 数值类型之间的转换就是自动将一种数据类型转换成另一种数据类型
  • 数值类型之间自动转换时的表:
package JavaSE.Chapter3.Section35.cs352;public class mains {public static void main(String[] args) {/*可能会出现信息丢失的转换情况*/int a=1234567899;long b=1234567891234567891L;float fa=a,fb=b;//单精度浮点型只保留8位小数double da=a,db=b;    //双精度浮点型只保留16位小数System.out.println(fa);System.out.println(fb);System.out.println(da);System.out.println(db);/*不会出现信息丢失的转换情况*/byte b1=123;short s1=b1;int i1=b1;long l1=b1;System.out.println(s1);System.out.println(i1);System.out.println(l1);short s2=12345;int i2=s2;long l2=s2;System.out.println(i2);System.out.println(l2);int i3=1234567891;long l3=i3;double d3=i3;System.out.println(l3);System.out.println(d3);char c1='A';int i4=c1;System.out.println(i4);float f1=123.12345f;double d4=f1;System.out.println(f1);System.out.println(d4);}
}

  • 这里浮点型取值范围与计算机组成原理里面讲的IEEE754标准有关

(2)二元运算时的自动转换

  • 此外两种不同类型的数据进行二元运算时,比如加减乘除,数据转换从位数少的数据类型向位数多的数据类型转换,然后再进行二元运算。
  • 比如char是1个字节,int是4个字节,char+int,两种数据类型相加,得到的是一个整数。
     char ch2='A';int  i=1;double d1=100.11d;System.out.println(ch2+i);System.out.println(d1+i);System.out.println(d1+ch2);

(3)强制类型转换

  • 比如说将double转换为int型,即不按照上面所提到的转换表表进行合法转换
  • 强制类型转换将小数部分截去,将浮点值转换为整型值

  • 如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值
  • 不要将boolean与其它数据类型进行转换
  • 可以用条件转换x? 1:0代替

8.参考

  • https://www.runoob.com/java/java-basic-datatypes.html
  • 《java核心技术卷一第十版》

java数据类型(整型、浮点型、char类型、boolean型、类型转换)相关推荐

  1. JAVA入门级教学之(char类型)

    java程序主要讲解的数据类型之:char类型[占用2个字节] public class DateTypeTest02 {public static void main(String[] args){ ...

  2. c语言 char java转换_c语言中char类型转int类型

    前言 在九度oj做acm的时候,经常会遇到了char类型和int类型相互转化的问题,这里进行一下总结.今后,可能会多次更新博客,因为半年做了很多总结,但是都是保存在word文档上了,现在开始慢慢向CS ...

  3. python支持char数据类型吗_python有char类型吗,

    详细内容 python没有char类型,一个字符也是字符串. 为什么在Python中没有专门的char数据类型呢? 简单胜于复杂.在 Python 中, 字符串中的每个字符占的空间大小是 8 bit. ...

  4. Java学习(4)—— 布尔类型、基本数据类型转换、基本数据类型和String类型的转换

    布尔类型 也叫Boolean类型,boolean只允许取true和false. boolean占一个字节. 适用于逻辑运算,流程控制语句. 有默认类型,是false.但是应该声明为成员变量或是静态变量 ...

  5. char 类型与lpcwstr_C++类型转换 LPWSTR转char*

    /****************************************************************************************** Function ...

  6. matlab整型和浮点的区别,技术帖 | 心理学MATLAB初学者教程--简单数据类型介绍(逻辑型数据,整型/浮点型数据,字符型)......

    1.2.1 什么是变量和变量名 变量这个词似乎在许多地方都有出现,在计算机中变量是指是一段有名字的连续存储空间(摘自百度百科),而这个所谓的名字就叫做变量名.举个例子说现在我们再MATLAB的命令窗口 ...

  7. oracle数值型转为char类型,PLSQL: Oracle函数to_char转化数字型指定小数点位数的技巧...

    问题题出:                 数字 0.023 => 转化成字符串 "0.023"问题难点:to_char,函数功能,就是将数值型或者日期型转化为字符型. 比如 ...

  8. Java 如何实现int和char类型的比较

    首先举个栗子

  9. java数据类型的转换函数_JAVA中常用数据类型转换函数

    JAVA中常用数据类型转换函数: string->byte Byte static byte parseByte(String s) byte->string Byte static St ...

  10. go语言基础-数据类型- 整型,浮点型,布尔型

    基本数据类型 整型和浮点型 字符串 布尔类型 所有的语言都包含这三部分,我们之前学过的shell脚本也一样: 1. 整型和浮点型 package mainimport ("fmt" ...

最新文章

  1. Mysql使用大全 从基础到存储过程
  2. 用C语言解“打印九九乘法表”题
  3. POJ2533解题报告
  4. 【Docker实战之入门】Dockerfile详细分析:构建docker镜像(4)构建动态网站WordPress...
  5. c语言学生考勤系统课设报告,C语言课程设计总结报告学生考勤系统设计
  6. CODEVS 1205 单词反转
  7. C#操作Excel(1)Excel对象模型
  8. 线程同步-事件内核对象
  9. (14)Node.js 核心模块—http
  10. Hbase CallQueueTooBigException 异常处理
  11. linux内核源码 进程,详解:Linux内核源代码
  12. 基于matlab的红外图像处理算法研究,基于小波的红外图像去噪算法研究
  13. Python爬虫之40行代码爬取金庸所有武侠小说
  14. VMware安装Fedora 35 Workstation及使用体验
  15. 我常用的几个软件的注册码
  16. H5点击复制按钮复制文本
  17. Android 最常用的设计模式十 安卓源码分析——策略模式(Strategy)
  18. 555集成定时器及其应用
  19. python基础-文本对齐(居中,左对齐,右对齐)
  20. cpua55和a53哪个好_OPPOA55和OPPOA53哪个好-参数对比-更值得入手

热门文章

  1. E470 外放没声音问题解决
  2. 体验一键php/java环境安装工具oneinstack
  3. 企业级 SpringBoot 教程 (十七)上传文件
  4. UOJ#80 二分图最大权匹配 [模板题]
  5. BZOJ3775 : 点和直线
  6. [再寄小读者之数学篇](2014-11-26 幂等矩阵的一个充分条件)
  7. 肾炎治疗有效方(湿热壅滞三焦,气机不利)
  8. C#接口-接口的继承
  9. Linux学习笔记之——Linux硬盘分区知识
  10. 1047. 删除字符串中的所有相邻重复项