🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 数据类型 [TOC] ## 概述 Java 是一种强数据类型的语言,就是指在变量进行定义的时候,就指定了变量的数据类型是什么。 **变量的概念:把一堆数据起了个名字。** 数据类型其实就是在内存中用不同的结构对数据进行存储和运算。 >[warning]内存:运行中的程序都会占用内存空间,因为程序在运行过程中,需要开辟包括方法栈区、变量....,广泛的理解,在程序运行结束后内存空间会被释放,但是定义的变量、方法等,都是有「生命周期」的,一旦变量销毁了,内存也是会释放的。** 在 Java 中,有垃圾自动回收机制 GC ,对于释放的或者无效的变量会自动回收,不像 C 、C++ 要手动的去释放。 ## 数据类型的分类 ### 基本数据类型 * 数值型 * 整数型:byte(-128-127)、short(15次方)、int(31次方)、long(63次方) * 浮点型:float(38次方)、double(308次方) * **在实际开发中,我们一般使用 int、double** * 字符型 * char:用单引号表示,Java 中使用16位的 Unicode 字符集作为编码方式, * 表示方式 * 直接通过单个字符表示:'a'、‘9' 等; * 通过转义字符表示:'\\t'、'\\n'、'\\r'、'\\''; * 直接使用 unicode 表示:'\\uxxxx'。 * 布尔型 * boolean:表示逻辑中的真和假,值只有 true / false。 >[success] 1. 在 Java 中是没有表现多个字符的基本数据类型的,但是在 Java 中提供了一个 String 类,去表现字符串。 > 2. 转义字符的使用:当你要打印无法列出的字符,比如换行符等等,要用转义字符,还有就是一些在字符串内要搞错的字符,总之是对编译器来说具有特殊意义的字符。 >[info]在基本数据中,是可以进行类型之间的强制转化的,但是要注意,如果从低精度的转化为高精度时不会有问题,但是从高精度转化为低精度时,可能出现精度缺失。 引用数据类型(类类型):后续讲解。 ### 各数据类型使用补充 1. 在Java中,数据类型分为基本数据类型和引用数据类型(类类型)。 作为强类型语言,Java在编译时,会进行严格的语法检查,每个变量在编译时,就确定了其类型。所有变量必须显式地声明类型,而且必须声明后使用。 2. 数据类型分类图示: ![](https://img.kancloud.cn/0d/41/0d417fe968b0c28d6a3ad466651225fd_527x251.png) 3. 浮点类型的使用 * 因为Java浮点数使用二进制数据的科学计数法来表示,因此不能精确的表示一个浮点数。如5.2345556f赋值给float类型的变量,输出的时候会发生变化,即使用精度更高的double类型,有时这个问题依然会出现。如果开发者希望精确的保存一个浮点数,可以使用BigDecimal类。 * Java语言默认的浮点类型时double。如果希望把一个数当做float类型处理,应该在浮点值后面紧跟f或F,double类型可以d或D,但是没有必要。 4. 基本类型的类型转换 在Java程序中,不同的基本类型的值,经常需要进行互相转换。Java语言中提供的7种数值类型之间可以互相转换,有两种类型转换模式:自动类型转换和强制类型转换。 * **自动类型转换** 把某种基本数据类型的值,直接赋值给其他基本数据类型的值 >[danger] 如果把范围小的数据,赋值给范围大的数据时,不会出现精度的缺失;反之,则可能会出现精度的缺失。 ![](https://img.kancloud.cn/36/84/368479df5eabc11340660eadfe832566_521x99.png) ~~~Java //示例 class Client1 { public static void main(String[] args) { int i = 100; double di = i; //int a = di; System.out.println(di); } } ~~~ 注意: >[danger] 1.上方代码左边转为右边的数据类型是没有问题的; > 2.当把任何基本数据和字符串,进行连接运算的时候,基本数据类型将自动转换为字符串类型。 * **强制数据类型转换** 如果需要把上方代码中的右边,转换为左边时,则成为强制类型转换。 语法:`(targetType)value ` 强制类型转换时,需加上()运算符。 **强制类型转换也许会出现精度的缺失或溢出的情况。** ~~~ 示例: int i = 150; byte b = (byte)i; System.out.println(b); int i2 = 100; byte b2 = (byte)i2; System.out.println(b2); String s = "56"; int si = Integer.parseInt(s); System.out.println(si); ~~~ **如果希望把String类型的数据,强制转为基本数据类型,可以使用基本数据对应的包装类实现。** 5. 表达式的自动提升 当一个表达式中包含多个基本数据类型的值时,整个算术表达式的数据类型将发生自动提升。 提升规则: 所有的byte/short/char类型将被提升到int; 整个算术表达式的数据类型,将被提升到与表达中最高等级操作数相同的类型。 ~~~ 示例: char t1 = 'a'; short t2 = 100; int t3 = 45; double t4 = 10.5; System.out.println(t1 + t2 + t3 + t4); ~~~ **如果表达式包含字符串,应当把+号,当做字符串连接运算符,而不是加法运算符。** ## 习题 1. 分别为如下值,找到合适的类型来定义 ~~~ 3.14 2.769343 365 12 '吃' false "不可描述" ~~~ 比如3.14就使用double `double a = 3.14;` 2. 练习-类型转换 ~~~ short a = 1; short b = 2; ~~~ 那么`a+b`是什么类型?