网站设计 方案,深圳高端网页设计公司,常州做网站代理商,学做网站丛什么开始数据类型通过上一节#xff0c;明白了变量就是申请内存来存储值#xff0c;即当创建变量的时候#xff0c;需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间#xff0c;确定了变量的类型#xff0c;即确定了数据需分配内存空间的大小#xff0c;数据…数据类型通过上一节明白了变量就是申请内存来存储值即当创建变量的时候需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间确定了变量的类型即确定了数据需分配内存空间的大小数据在内存的存储方式。Java 是一种强制类型的语言所有的变量都必须先明确定义其数据类型然后才能使用。Java 中所有的变量、表达式和值都必须有自己的类型没有“无类型”变量这样的概念。Java 语言支持的数据类型分为两种内置数据类型/基本数据类型 引用数据类型基本数据类型primitive type都是直接存储在内存中的内存栈上数据本身的值就是存储在栈空间引用数据类型reference type继承与Object类引用即指针是存储在有序的内存栈上而对象本身的值存储在内存堆中。基本数据类型Java语言提供了八种基本类型。六种数字类型四个整数型两个浮点型一种字符类型还有一种布尔型。占用存储范围 1字符 2字节byte 16位对于数值类型的基本类型的取值范围我们无需强制去记忆因为它们的值都已经以常量的形式定义在对应的包装类中了。请看下面的例子public class PrimitiveTypeTest {public static void main(String[] args) {// byte System.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();// short System.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();// int System.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();// long System.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();// float System.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();// double System.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();// char System.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);}}输出基本类型byte 二进制位数8包装类java.lang.Byte最小值Byte.MIN_VALUE-128最大值Byte.MAX_VALUE127基本类型short 二进制位数16包装类java.lang.Short最小值Short.MIN_VALUE-32768最大值Short.MAX_VALUE32767基本类型int 二进制位数32包装类java.lang.Integer最小值Integer.MIN_VALUE-2147483648最大值Integer.MAX_VALUE2147483647基本类型long 二进制位数64包装类java.lang.Long最小值Long.MIN_VALUE-9223372036854775808最大值Long.MAX_VALUE9223372036854775807基本类型float 二进制位数32包装类java.lang.Float最小值Float.MIN_VALUE1.4E-45最大值Float.MAX_VALUE3.4028235E38基本类型double 二进制位数64包装类java.lang.Double最小值Double.MIN_VALUE4.9E-324最大值Double.MAX_VALUE1.7976931348623157E308基本类型char 二进制位数16包装类java.lang.Character最小值Character.MIN_VALUE0最大值Character.MAX_VALUE65535Float和Double的最小值和最大值都是以科学记数法的形式输出的结尾的E数字表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 10的3次 31403.14E-3 就是 3.14 x 10的-3次 0.00314。实际上JAVA中还存在另外一种基本类型 void它也有对应的包装类 java.lang.Void不过我们无法直接对它们进行操作。引用数据类型引用数据类型建立在基本数据类型的基础上包括数组、类和接口。引用数据类型是由用户自定义用来限制其他数据的类型。另外Java 语言中不支持 C 中的指针类型、结构类型、联合类型和枚举类型。引用类型还有一种特殊的 null 类型。所谓引用数据类型就是对一个对象的引用对象包括实例和数组两种。实际上引用类型变量就是一个指针只是 Java 语言里不再使用指针这个说法。空类型null type就是 null 值的类型这种类型没有名称。因为 null 类型没有名称所以不可能声明一个 null 类型的变量或者转换到 null 类型。空引用null是 null 类型变量唯一的值。空引用null可以转换为任何引用类型。在实际开发中程序员可以忽略 null 类型假定 null 只是引用类型的一个特殊直接量。注意空引用null只能被转换成引用类型不能转换成基本类型因此不要把一个 null 值赋给基本数据类型的变量。数据类型转换数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的它需要从一种数据类型转换成另一种数据类型。数据类型的转换可以分为隐式转换自动类型转换和显式转换强制类型转换两种。隐式转换自动类型转换如果以下 2 个条件都满足那么将一种类型的数据赋给另外一种类型变量的时将执行自动类型转换automatic type conversion。两种数据类型彼此兼容目标类型的取值范围大于源数据类型低级类型数据转换成高级类型数据当以上 2 个条件都满足时拓宽转换widening conversion发生。例如 byte 类型向 short 类型转换时由于 short 类型的取值范围较大会自动将 byte 转换为 short 类型。在运算过程中由于不同的数据类型会转换成同一种数据类型所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下数值型数据的转换byte→short→int→long→float→double。字符型转换为整型char→int。以上数据类型的转换遵循从左到右的转换顺序最终转换成表达式中表示范围最大的变量的数据类型。例 顾客到超市购物购买牙膏 2 盒面巾纸 4 盒。其膏的价格是 10.9 元面巾纸的价格是 5.8 元求商品总价格。实现代码如下public static void main(String[] args) { float price1 10.9f; // 定义牙膏的价格 double price2 5.8; // 定义面巾纸的价格 int num1 2; // 定义牙膏的数量 int num2 4; // 定义面巾纸的数量 double res price1 * num1 price2 * num2; // 计算总价 System.out.println(一共付给收银员 res 元); // 输出总价
}上述代码中首先定义了一个 float 类型的变量存储牙膏的价格然后定义了一个 double 类型的变量存储面巾纸的价格再定义两个 int 类型的变量存储物品的数量最后进行了乘运算以及和运算之后将结果储存在一个 double 类型的变量中进行输出。程序执行结果一共付给收银员44.99999923706055元从执行结果看出float、int 和 double 三种数据类型参与运算最后输出的结果为 double 类型的数据。这种转换一般称为“表达式中类型的自动提升”。自动类型提升有好处但它也会引起令人疑惑的编译错误。例如下面看起来正确的程序却会引起问题byte b 50;
b b * 2; // Type mismatch: cannot convert from int to byte如上所示第二行会报“类型不匹配无法从int转换为byte”错误。该程序试图将一个完全合法的 byte 型的值 50*2 再存储给一个 byte 型的变量。但是当表达式求值的时候操作数被自动的提升为 int 型计算结果也被提升为 int 型。这样表达式的结果现在是 int 型不强制转换它就不能被赋为 byte 型。确实如此在这个特别的情况下被赋的值将仍然适合目标类型。所以应该使用一个显示的强制类型转换例如byte b 50;
b (byte)(b*2);这样就能产生正确的值 100。注意char 类型比较特殊char 自动转换成 int、long、float 和 double但 byte 和 short 不能自动转换为 char而且 char 也不能自动转换为 byte 或 short。显式转换强制类型转换尽管自动类型转换是很有帮助的但并不能满足所有的编程需要。例如如果你需要将 double 型的值赋给一个 int 型的变量。这种转换不会自动进行因为 double 型的变化范围比 int 型的要小。这种转换有使成为“缩小转换”因为肯定要将源数据类型的值变小才能适合目标数据类型。所以当两种数据类型不兼容或目标类型的取值范围小于源类型时自动转换将无法进行这时就需要进行强制类型转换。语法格式如下(type)variableName其中type 为 variableName 要转换成的数据类型而 variableName 是指要进行类型转换的变量名称实例如下int a 3;
double b 5.0;
a (int)b;上述代码中首先将 double 类型变量 b 的值强制转换成 int 类型然后将值赋给 a但是变量 b 本身的值是没有发生变化的。在强制类型转换中如果是将浮点类型的值转换为整数直接去掉小数点后边的所有数字而如果是整数类型强制转换为浮点类型时将在小数点后面补零。例1顾客到超市购物购买牙膏 2 盒面巾纸 4 盒。其中牙膏的价格是 10.9 元面巾纸的价格是 5.8 元求商品总价格在计算总价时采用 int 类型的数据进行存储。实现代码如下public static void main(String[] args) { float price1 10.9f; double price2 5.8; int num1 2; int num2 4; int res2 (int) (price1 * num1 price2 * num2); System.out.println(一共付给收银员 res2 元);
}在上述实例中有 double 类型、float 类型和 int 类型的数据参与运算其运算结果默认为 double 类型题目要求的结果为 int 类型因为 int 类型的取值范围要小于 double 类型的取值范围所以需要进行强制类型转换。执行结果一共付给收银员44元