数据类型分类

数据类型

数据类型分类

1.Java是强类型语言(strongly typed)语言

强类型主要包含两个方面的含义:①所有的变量必须先声明、后使用;②指定类型的变量只能接受类型与之匹配的值。这里意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变量能被赋的值,限制了这些操作的含义。

强类型语言可以在编译时进行更严格的语法检查,从而减少编程的错误。

2.基本数据类型

 

Java的基本数据类型分为两大类:boolean类型和数值类型。而数据类型又可以分为整数类型和浮点数类型,整数类型里的字符类型也可被单独对待。因此常把Java里的基本数据类型分为4类,如上图所示。

Java只包含这8种基本数据类型,值得指出的是,字符串不是基本数据类型,字符串是一个类,也就是一个引用数据类型。

整型

通常所说的整型,实际上指的是如下4种类型:

byte:一个byte类型整数在内存里占8位,表数范围是:-128(-2^7)~127(2^7-1)。

short:一个short类型整数在内存里占16位,表数范围是:-32768(-2^15)~32767(2^15-1)。

int:一个int类型整数在内存中占32位,表数范围是:-2147483648(-2^31)~2147483647(2^31-1)。

long:一个long类型整数在内存里通常占64位,表数范围是:(-2^63)~(2^63-1)。

int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。除此之外,有如下两种情况必须指出。

1.如果直接将一个较小的整数值(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数值当成byte或short类型来处理。

2.如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数型当成long类型来处理,应在这个整数值后增加I或者L作为后缀。通常推荐使用L,因为英文字母I很容易跟数字1搞混。

注意!!!

可以把一个较小的整数值(在int类型的表数范围以内)直接赋给一个long类型的变量,这并不是因为Java会把这个较小的整数值当成long类型来处理,Java依然把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。

Java中整数值有4中表示方式:十进制、二进制、八进制和十六进制,其中二进制的整数以0b或0B开头;八进制的整数以0开头;十六进制的整数以0x或者X开头,其中10~15分别是以a~f(此处的a~f不区分大小写)来表示。

字符型

字符型通常用于表示单个的字符,字符型值必须使用单引号(’)括起来,Java语言使用16位的Unicode字符集作为编码方式,而Unicode被设计成支持世界上所有书面语言的字符,包括中文字符,因此Java程序支持各种语言的字符。

字符型值有如下三种表示形式:

1.直接通过单个字符来指定字符型值,例如‘A’、‘9’和‘0’等。

2.通过转义字符表示特殊字符型值,例如‘\n’、‘\t’等。

3.直接使用Unicode值来表示字符型值,格式是‘\uXXXX’,其中XXXX代表一个十六进制的整数。

Java语言中常见的转义字符

转义字符说明Unicode表示方式
\b退格符\u0008
\n换行符\u000a
\r回车符\u000d
\t制表符\u0009
\ "双引号\u0022
\ '单引号\u0027
\ \反斜线\u005c

字符型值也可以采用十六进制编码方式来表示,范围是‘\u0000’~'\uFFFF',一共可以表示65536个字符,其中前256个(‘\u0000’~'\u00FF')字符和ASCII码中的字符完全重合。

由于计算机底层保存字符时,实际是保存该字符对应的编号,因此char类型的值也可直接作为整型值来使用,它相当于一个16位的无符号整数,表数范围是0~65535。

提示:

char类型的变量、值完全可以参与加、减、乘、除等数学运算,也可以比较大小——实际上都是用该字符对应的编码参与运算。

浮点型

Java的浮点类型有两种:float和double。Java的浮点类型有固定的表数范围和字段长度,字段长度和表数范围与机器无关。Java的浮点数遵循IEEE 745标准,采用二进制数据的科学计数法来表示浮点数,对于float型数值,第一位是符号位,接下来8位表示指数,再接下来23位表示尾数;对于double类型数值,第一位也是符号位,接下来11位表示指数,再接下来的52位表示尾数。

注意:

因为Java浮点数使用二进制数据的科学计数法来表示浮点数,因此可能不能精确表示一个浮点数。例如把5.2345556f值赋给一个float类型变量,接着输出这个变量时看到这个变量的值已经发生了改变。使用double类型的浮点数比float类型的浮点数更精确,但如果浮点数的精度足够高(小数点后的数字很多时),依然可能发生这种情况。如果开发者需要精确保存一个浮点数,则可以考虑BigDecimal类。

double类型代表双精度浮点数,float类型代表单精度浮点数。一个double类型的数值占8个字节、64位,一个float类型占4字节、32位。

Java语言的浮点数有两种表示形式。

十进制形式:这种形式就是简单的浮点数非,例如5.12、512.0、.512.浮点数必须包含一个小数点,否则会被当成int类型处理。

科学计数法形式:例如5.12e2(即5.1210^2),5.12E2(也是5.1210^2)。

Java语言的浮点类型默认是double类型,如果希望Java把一个浮点数类型当成float类型处理应该在这个浮点数类型值后紧跟f或F。例如,5.12代表一个double类型的值,占64位的内存空间;5.12f或者5.12F才表示一个float类型的值,占32位的内存空间。当然,也可以在一个浮点数后添加d或D后缀,强制指定是double类型,但通常没必要。Java还提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。例如使用一个正数除以0将得到正无穷大,使用一个负数除以0将得到负无穷大,0.0除以0.0或对一个负数开方将得到一个非数,正无穷大通过Double或Float类的POSITIVE_INFINITY表示;负无穷大通过Double或Float类的NEGATIVE_INFINITY表示。

必须指出的是,所有的正无穷大数值都是相等的,所有的负无穷大数值都是相等的;而NaN不与任何数值相等,甚至和NaN都不相等。

注意:

只有浮点数除以0才可以得到正无穷大或负无穷大,因为Java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)处理。如果一个整数值除以0,则会抛出一个异常:ArithmeticException:/by zero(除以0异常)。

布尔型

布尔型只有一个boolean类型,用于表示逻辑上的“真”或“假”。在Java语言中,boolean类型的数值只能是true或false,不能用0或者非0来代表。其他基本数据类型的值也不能转换成boolean类型。

提示:

Java规范并没有强制指定boolean类型的变量所占用的内存空间。虽然boolean类型的变量或值只要1位即可保存,但由于大部分计算机在分配内存时允许分配的最小内存单位是字节(8位 ),因此bit大部分时候实际上占用8位。

字符串“true”和“false”不会直接转换成boolean类型,但如果使用一个boolean类型的值和字符串进行连接运算,则boolean类型的值将会自动转换成字符串。

 

boolean类型的值或是变量主要用来做旗标来进行流程控制,Java语言中使用boolean类型的变量或值控制的流程主要有如下几种。

1.if条件控制语句

2.while循环控制语句

3.do while循环控制语句

4.for循环控制语句

除此之外,boolean类型的变量和值还可在三目运算符(? :)中使用。

 

 

引用类型包括类、接口和数组类型,还有一种特殊的null类型。

所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型就是一个指针,只是Java语言里不再使用指针这个说法。

空类型(null type)就是null值的类型,这种类型没有名称。因为null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型。空引用(null)是null类型变量唯一的值。空引用(null)可以转换为任何引用类型。

在实际开发中,程序员可以忽略null类型,假定null只是引用类型的一个特殊直接量。

特别注意:

空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量。

public class Demo01 {
    public static void main(String[] args) {
        //数据类型扩展及面试题2022.1.13
        //整数拓展:  进制  二进制0b   十进制    八进制0    十六进制0x
        int i =10;
        int i2 =010;//八进制0
        int i3 =0x11;//十六进制0x   0~9 A~F 16
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println("=================================");
        //浮点数拓展? 银行业务怎么表示? 钱
        //BigDecimal 数学工具类
        //float 有限 离散 舍入误差 大约  接近但不等于
        //double
        //最好完全使用浮点数进行比较
        float f =0.1f;//0.1
        double d =1.0/10;//0.1
        System.out.println(f==d);//false
        float d1 =23131312312312313f;
        float d2 =d1+1;
        System.out.println(d1==d2);//true
        System.out.println("=================================");
        //字符拓展
        char c1 = 'A';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int)c1);//强制换行
        System.out.println(c2);
        System.out.println((int)c2);//强制换行
        //所有的字符本质还是数字
        //编码 Unicode   2字节
        System.out.println("=================================");
        char c3 = '\u0061';
        System.out.println(c3);//这里会输出"a"
        //转义字符
        //\t  制表符
        //\n  换行
        System.out.println("Hello\n World");
        System.out.println("Hello\t World");
        System.out.println("=================================");
        //报错,暂时未处理
        //String sa = new String(original:"hello world");
        //String sb = new String(original:"hello world");
        //System.out.println(sa==sb);
        String sc ="hello world";
        String sd ="hello world";
        System.out.println(sc==sd);
        //对象   从内存分析
​
        //布尔值扩展
        boolean flag = true;
        if (flag==true){}//新手
        if (flag){}//老手
        //Less is More! 代码要精简易读
    }
}
​

2022.1.13

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撒浪嘿呦743

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值