原文地址:http://www.work100.net/training/java-basic-datatype.html

更多教程:光束云 - 免费课程

基本数据类型

序号 文内章节 视频
1 概述 -
2 内置数据类型 -
3 实例 -
4 类型默认值 -
5 引用类型 -
6 Java常量 -
7 自动类型转换 -
8 强制类型转换 -
9 隐含强制类型转换 -

请参照如上章节导航进行阅读

1.概述

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

Java 的两大数据类型:

  • 内置数据类型
  • 引用数据类型

2.内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数
  • 最小值是 -128(-2^7)
  • 最大值是 127(2^7-1)
  • 默认值是 0
  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
  • 例子:byte a = 100byte b = -50;

short

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数
  • 最小值是 -32768(-2^15)
  • 最大值是 32767(2^15 - 1)
  • short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
  • 默认值是 0
  • 例子:short s = 1000short r = -20000;

int

  • int 数据类型是32位、有符号的以二进制补码表示的整数
  • 最小值是 -2,147,483,648(-2^31)
  • 最大值是 2,147,483,647(2^31 - 1)
  • 一般地整型变量默认为 int 类型
  • 默认值是 0
  • 例子:int a = 100000, int b = -200000;

long

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数
  • 最小值是 -9,223,372,036,854,775,808(-2^63)
  • 最大值是 9,223,372,036,854,775,807(2^63 -1)
  • 这种类型主要使用在需要比较大整数的系统上
  • 默认值是 0L
  • 例子: long a = 100000LLong b = -200000L;

L理论上不分大小写,但是若写成l容易与数字1混淆,不容易分辩。所以最好大写

float

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
  • float 在储存大型浮点数组的时候可节省内存空间
  • 默认值是 0.0f
  • 浮点数不能用来表示精确的值,如货币
  • 例子:float f1 = 234.5f;

double

  • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数
  • 浮点数的默认类型为double类型
  • double类型同样不能表示精确的值,如货币
  • 默认值是 0.0d
  • 例子:double d1 = 123.4;

boolean

  • boolean数据类型表示一位的信息
  • 只有两个取值:truefalse
  • 这种类型只作为一种标志来记录 true/false 情况
  • 默认值是 false
  • 例子:boolean one = true;

char

  • char类型是一个单一的 16 位 Unicode 字符
  • 最小值是 \u0000(即为0
  • 最大值是 \uffff(即为65,535
  • char 数据类型可以储存任何字符
  • 例子:char letter = 'A';

3.实例

对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。请看下面的例子:

  1. public class PrimitiveTypeTest {
  2. public static void main(String[] args) {
  3. // byte
  4. System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
  5. System.out.println("包装类:java.lang.Byte");
  6. System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
  7. System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
  8. System.out.println();
  9. // short
  10. System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
  11. System.out.println("包装类:java.lang.Short");
  12. System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
  13. System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
  14. System.out.println();
  15. // int
  16. System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
  17. System.out.println("包装类:java.lang.Integer");
  18. System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
  19. System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
  20. System.out.println();
  21. // long
  22. System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
  23. System.out.println("包装类:java.lang.Long");
  24. System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
  25. System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
  26. System.out.println();
  27. // float
  28. System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
  29. System.out.println("包装类:java.lang.Float");
  30. System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
  31. System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
  32. System.out.println();
  33. // double
  34. System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
  35. System.out.println("包装类:java.lang.Double");
  36. System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
  37. System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
  38. System.out.println();
  39. // char
  40. System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
  41. System.out.println("包装类:java.lang.Character");
  42. // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
  43. System.out.println("最小值:Character.MIN_VALUE="
  44. + (int) Character.MIN_VALUE);
  45. // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
  46. System.out.println("最大值:Character.MAX_VALUE="
  47. + (int) Character.MAX_VALUE);
  48. }
  49. }

编译以上代码输出结果如下所示:

  1. 基本类型:byte 二进制位数:8
  2. 包装类:java.lang.Byte
  3. 最小值:Byte.MIN_VALUE=-128
  4. 最大值:Byte.MAX_VALUE=127
  5. 基本类型:short 二进制位数:16
  6. 包装类:java.lang.Short
  7. 最小值:Short.MIN_VALUE=-32768
  8. 最大值:Short.MAX_VALUE=32767
  9. 基本类型:int 二进制位数:32
  10. 包装类:java.lang.Integer
  11. 最小值:Integer.MIN_VALUE=-2147483648
  12. 最大值:Integer.MAX_VALUE=2147483647
  13. 基本类型:long 二进制位数:64
  14. 包装类:java.lang.Long
  15. 最小值:Long.MIN_VALUE=-9223372036854775808
  16. 最大值:Long.MAX_VALUE=9223372036854775807
  17. 基本类型:float 二进制位数:32
  18. 包装类:java.lang.Float
  19. 最小值:Float.MIN_VALUE=1.4E-45
  20. 最大值:Float.MAX_VALUE=3.4028235E38
  21. 基本类型:double 二进制位数:64
  22. 包装类:java.lang.Double
  23. 最小值:Double.MIN_VALUE=4.9E-324
  24. 最大值:Double.MAX_VALUE=1.7976931348623157E308
  25. 基本类型:char 二进制位数:16
  26. 包装类:java.lang.Character
  27. 最小值:Character.MIN_VALUE=0
  28. 最大值:Character.MAX_VALUE=65535

FloatDouble 的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。

实际上,Java 中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

4.类型默认值

下表列出了 Java 各个类型的默认值:

数据类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char 'u0000'
String (or any object) null
boolean false

实例:

  1. public class Test {
  2. static boolean bool;
  3. static byte by;
  4. static char ch;
  5. static double d;
  6. static float f;
  7. static int i;
  8. static long l;
  9. static short sh;
  10. static String str;
  11. public static void main(String[] args) {
  12. System.out.println("Bool :" + bool);
  13. System.out.println("Byte :" + by);
  14. System.out.println("Character:" + ch);
  15. System.out.println("Double :" + d);
  16. System.out.println("Float :" + f);
  17. System.out.println("Integer :" + i);
  18. System.out.println("Long :" + l);
  19. System.out.println("Short :" + sh);
  20. System.out.println("String :" + str);
  21. }
  22. }

实例输出结果为:

  1. Bool :false
  2. Byte :0
  3. Character:
  4. Double :0.0
  5. Float :0.0
  6. Integer :0
  7. Long :0
  8. Short :0
  9. String :null

5.引用类型

  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 EmployeePuppy 等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null
  • 一个引用变量可以用来引用任何与之兼容的类型。
  • 例子:Site site = new Site("光束云")

6.Java常量

常量在程序运行时是不能被修改的。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

  1. final double PI = 3.1415927;

虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量

字面量可以赋给任何内置类型的变量。例如:

  1. byte a = 68;
  2. char a = 'A'

byteintlong、和short都可以用十进制16进制以及8进制的方式来表示。

当使用常量的时候,前缀 0 表示 8进制,而前缀 0x 代表 16进制, 例如:

  1. int decimal = 100;
  2. int octal = 0144;
  3. int hexa = 0x64;

和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:

  1. "Hello World"
  2. "two\nlines"
  3. "\"This is in quotes\""

字符串常量和字符常量都可以包含任何Unicode字符。例如:

  1. char a = '\u0001';
  2. String a = "\u0001";

Java语言支持一些特殊的转义字符序列。

符号 字符含义
\n 换行 (0x0a)
\r 回车 (0x0d)
\f 换页符(0x0c)
\b 退格 (0x08)
\0 空字符 (0x20)
\s 字符串
\t 制表符
\" 双引号
\' 单引号
\\ 反斜杠
\ddd 八进制字符 (ddd)
\uxxxx 16进制Unicode字符 (xxxx)

7.自动类型转换

整型实型(常量)字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

  1. ------------------------------------>
  2. byte,short,char—> int —> long—> float —> double

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。
  • 不能把对象类型转换成不相关类的对象。
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  • 转换过程中可能导致溢出或损失精度,例如:
  1. int i =128;
  2. byte b = (byte)i;

因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
  1. (int)23.7 == 23;
  2. (int)-45.89f == -45

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

实例:

  1. public class ZiDongLeiZhuan{
  2. public static void main(String[] args){
  3. char c1='a';//定义一个char类型
  4. int i1 = c1;//char自动类型转换为int
  5. System.out.println("char自动类型转换为int后的值等于"+i1);
  6. char c2 = 'A';//定义一个char类型
  7. int i2 = c2+1;//char 类型和 int 类型计算
  8. System.out.println("char类型和int计算后的值等于"+i2);
  9. }
  10. }

运行结果为:

  1. char自动类型转换为int后的值等于97
  2. char类型和int计算后的值等于66

解析:c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97A 对应值为 65,所以 i2=65+1=66

8.强制类型转换

  • 条件:转换的数据类型必须是兼容的。
  • 格式:(type)value type 是要强制类型转换后的数据类型,实例:
  1. public class QiangZhiZhuanHuan{
  2. public static void main(String[] args){
  3. int i1 = 123;
  4. byte b = (byte)i1;//强制类型转换为byte
  5. System.out.println("int强制类型转换为byte后的值等于"+b);
  6. }
  7. }

运行结果:

  1. int强制类型转换为byte后的值等于123

9.隐含强制类型转换

  • 整数的默认类型是 int
  • 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f

这一节讲解了 Java 的基本数据类型。下一节将探讨不同的变量类型以及它们的用法。


上一篇:对象和类

下一篇:变量类型


如果对课程内容感兴趣,可以扫码关注我们的 公众号QQ群,及时关注我们的课程更新


Java入门 - 语言基础 - 05.基本数据类型的更多相关文章

  1. Java入门 - 语言基础 - 01.Java简介

    原文地址:http://www.work100.net/training/java-intro.html 更多教程:光束云 - 免费课程 Java简介 序号 文内章节 视频 1 概述 2 主要特性 3 ...

  2. Java入门 - 语言基础 - 03.基础语法

    原文地址:http://www.work100.net/training/java-basic-syntax.html 更多教程:光束云 - 免费课程 基础语法 序号 文内章节 视频 1 第一个Jav ...

  3. Java入门 - 语言基础 - 04.对象和类

    原文地址:http://www.work100.net/training/java-object-class.html 更多教程:光束云 - 免费课程 对象和类 序号 文内章节 视频 1 概述 2 J ...

  4. Java入门 - 语言基础 - 06.变量类型

    原文地址:http://www.work100.net/training/java-variable-type.html 更多教程:光束云 - 免费课程 变量类型 序号 文内章节 视频 1 概述 2 ...

  5. Java入门 - 语言基础 - 07.修饰符

    原文地址:http://www.work100.net/training/java-modifier-type.html 更多教程:光束云 - 免费课程 修饰符 序号 文内章节 视频 1 概述 2 访 ...

  6. Java入门 - 语言基础 - 12.Number和Math类

    原文地址:http://www.work100.net/training/java-number-math.html 更多教程:光束云 - 免费课程 Number和Math类 序号 文内章节 视频 1 ...

  7. Java入门 - 语言基础 - 16.数组

    原文地址:http://www.work100.net/training/java-array.html 更多教程:光束云 - 免费课程 数组 序号 文内章节 视频 1 概述 2 声明数组变量 3 创 ...

  8. Java入门 - 语言基础 - 19.方法

    原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...

  9. Java入门 - 语言基础 - 22.异常处理

    原文地址:http://www.work100.net/training/java-exception.html 更多教程:光束云 - 免费课程 异常处理 序号 文内章节 视频 1 概述 2 Exce ...

随机推荐

  1. HDU 1540 Tunnel Warfare (线段树)

    Tunnel Warfare Problem Description During the War of Resistance Against Japan, tunnel warfare was ca ...

  2. 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题

    现在很多小伙伴开始使用了 dotnet core 项目,但是如果是从以前的 dotnet framework 的项目修改为 dotnet core 项目格式,会发现编译的时候出现了 AssemblyI ...

  3. vue-learning:18 - js - watch

    watch watch可以监听data和computed中值的变化. watch在实例对象作用域中可以监听实例对象的数据,即var vm = new Vue(options)时作为配置对象属性传入.监 ...

  4. Tufurama CodeForces - 961E (cdq分治)

    题面 One day Polycarp decided to rewatch his absolute favourite episode of well-known TV series " ...

  5. 【25.93%】【676D】Theseus and labyrinth

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. CAS5.3 单点登录/登出/springboot/springmvc

    环境: jdk:1.8 cas server:5.3.14 + tomcat 8.5 cas client:3.5.1 客户端1:springmvc 传统web项目(使用web.xml) 客户端2:s ...

  7. struts2生成随机验证码图片

    之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...

  8. 本地安装配置Gradle及IDEA使用本地Gradle

    一.下载Gradle   下载地址:http://services.gradle.org/distributions/   下载版本的bin.zip 二.配置环境变量 三.验证   在cmd模式下查看 ...

  9. sqlyong到期后怎么办

    Sqlyog作为一款可视化的数据库管理工具,各种方便我就不说了,但是未经汉化或者绿色过的软件存在30天的生命期,到期后我们就不可以使用了,要摸卸载重装,我们还可以去修改注册表,来延长它的生命期,具体步 ...

  10. jeecg中自定义按钮时遇到的问题