2019 数据类型

数据类型

一、什么是数据类型

    1.百度百科: 数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。

        简单理解 :  Java对数据进行了分类,存在不同的类型

        为什么需要数据分类:不同的数据类型占用的存储空间不一样,为了更好的利用计算机内存 空间,防止出现小数据存在大数据类型导致浪  费空间的情况(存入的数据是以二进制的形式 放入存储空间的:01010101010101010101010101010101)

    2.在 Java 的领域里,

        基本数据类型变量(包括整数[byte、short、int、long]}、浮点型[float、double]、字符型[char]、布尔类型[boolean]):  存的是数据值本身

        引用数据类型变量:  存的是保存数据的内存空间地址,输出时输出的是数据。

        学习数据类型基本认识:

        Java中每个变量都有一种类型,数据类型限制变量能用的存储空间,所以可以存入的值也是有范围的

            示例:比如byte数据类型能存的值在-128~127之间,超过就没法存

二、进制

    1.进制的概念

        (1)10进制 (逢10进1)(计数)  在我们生活中最常用,同样,在我们写代码中也最常用。

            其中的符号可以是 :1 2 3 4 5 6 7 8 9 0

        (2)2进制  (逢2进1)  

            其中的符号可以是: 1 0

        (3)8进制 (逢8进1)

            其中的符号可以是: 0 1 2 3 4 5 6 7 

        (4)16进制(逢16进1) 

            其中的符号可以是:

            0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15) 

                示例:2A  

三、基本数据类型(8种)

    1.计算机中的存储单位

        1024T

        1T = 1024G

        1G = 1024MB

        1M = 1024KB

        1KB=1024Byte

        1Byte = 8 bit【1个bit就是一个二进制位】

    2.整型数据byte  short  int   long

        为什么会有不同大小的类型,举个例子比如存 5 这个数据怎么存的?

        byte(8位,范围是-128到127)

        short(16位)

        int(32位)

        long (64位)

        上面的byte short int long 最大长度可以通过jdk文档去找到 具体的范围。

        如果值比long还大,怎么办?

        Java提供了一个类:BigInteger:用于处理较大整数

        long赋值时,因为整数默认是int类型,要转换为long类型的值,后面加上l或L

        同一个整数可以使用不同的进制表示:(System.out.println(0b101)需jdk1.7才能按照十进制输出)

        Java7 开始 支持数字之间用 _ 分割(12_34_56输出123456)

    3.浮点型    float    double  其实就是小数

        float(单精度32位)

        直接给变量赋值时必须在浮点类型数据后面加上f 或F

        [ 表示该数据是一个浮点类型数据 ]

        double( 双精度64位)

        单精度双精度区别:

        (1)对于单精度浮点数,运行速度相比double更快,占内存更小,

            但是当数值非常大或者非常小的时候会变得不精确。

        (2)双精度比单精度表示的位数大 精确的位数多,简单地说, float表示的小数点位数少。

            默认浮点数的类型是 double

            表现形式:

            常规  

            例如  3.14  3.14f

            科学计数法

            例如  3.14e2  3.14*10^2     3.14e-2

            注意:存入的数据会有精度损失 [ 使用浮点数的时候需要注意 ]

            例如 double num= 1.0, 是一个无限接近1.0的一个值

            结论:浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。

            那怎么更精确的表示浮点数呢?

            Java提供了一个类BigDecimal来表示更精准的浮点数

    4.字符char 

        什么是字符:单引号引起来的一个符号就是字符数据    例如:'A'

        存储单位16 位[0-65535]  [2个字节,16位]。字符常量使用单引号 ''(英文状态下)包裹起来。

        表现形式:

        'A'最常用,最直观的方式

        使用一个数字表示,对应有一个ASCII码表[ 字符编码 ]

            例如:char c = 65;//表示 'A' 这个字符

        16进制表现形式

        'A'->65(10进制)

         'A'->0x41(16进制)怎么表示? '\u0041'

        特殊符号(需要使用转义符号转义)

         \'   \"   \\   \r(回车)  \n(换行) \t(制表符Tab)

        字符数据可以当成一个整数来使用,

        什么是ASCII表,就像化学元素周


    5.布尔类型boolean

        值只有两个 true false,不能使用 0 1表示

四、 引用类型

    1.引用类型String

        String是 java中已经设计好的一个类,表示的值是字符串,是字符串数据类型

        [注意:Java中设计的类和我们自己设计的类的性质是一样的]

        常见形式:String s = "你好";

        当String 和 + 一起使用的时候,这时候+ 是拼接字符串的功能

        System.out.println("你好"+2);//结果为    你好2

        int a  = 5;

        int b = 10

        System.out.println("a="+a+",b="+b); //结果为a=5,b=10

    2.一个类其实就是一种引用数据类型

        自己写的一个类也是一种数据类型,类型为类名

        我们自己写的类和Java已经写好的,性质一样

五、 数据类型转换

        整型数据【值】 : 默认类型为int类型 :例如:12默认为int类型

        小数数据 : 默认为double类型 :例如:3.14默认为double类型


        ①自动类型转换:小数据类型转大数据类型【存储空间的大小】

        ②强制类型转换:

        ①大数据类型转小数据类型[存储空间大小]

        ②相同存储空间不同类型表达值范围不一样[例如:char及short

    3.数据转换说明

        1.在Java中,boolean类型与所有其他7种类型都不能进行转换。(byte short int long float double char)

        2.如下7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化:

            byte short ,char  int  long float  double

            ①自动类型转换:  [short和char ,因值的范围不同,不能自动转换]其他都可以自动完成转换

            ②强制类型转换:  必须强制转换。

        思考:为什么float 在long 后面?

        小数(浮点数) 的存储方式,结构和整数不一样:知道就好无须深入研究..

    (1)自动转换

        1)数据类型过长 和 溢出

            byte b = 128;//超出byte范围

            long intMax = int最大数(查jdk文档)

        2)long  float  double只要两个操作数中有一个是上面类型的,另一个就会被转换成相应类型,并且结果也是该类型: 例如

            int  num = 10; 

            double b = 10.01;

            double  c = num + b;

            System.out.println(c);

        3)如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int(自动向上转型)

            short s = 10;

            int num = 20;

            int n = num + s;

            System.out.println(n);

    

            byte b=3;     

            b=(byte)(b*3);//必须声明byte。

            System.out.println(b);

        4)char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换

            例如:

            char  c = 'A'; 

            int num = 10; 

            int a = c+num;

            System.out.println(a);                           

        需要注意的是:

            1.char型具有两个字节,其数值范围是0 ~ 2^16-1,

            2.short类型也具有两个字节,其值的范围是-2^15 ~ 2^15-1

            这直接导致byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为值范围问题),同时,byte当然可以直接提升到short型。 

            所以,char 不能和byte short 相互自动转换

        5)特例 :只看类型不看值

            示例1:

            int a = 129;

            byte b = (byte)a;//编译器只看容器不看值

           System.out.println(b);//结果为-127

            示例2:

            byte  b  =  100;//可以自动转换

            float   f = 1.3;//不能自动转换

            int  a = 2147483647;

            a = a+1;

            System.out.println(a);  // 结果为  -2147483648

    (2)强制转换

        1.强制类型转换的语法

        数据类型 变量名 = (数据类型)值;//值可能是更高的类型

        2.强制类型转换的注意事项

            (1)高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.

            (2)实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;

        3.示例

            比如说:double 转 float  

            示例一:

            int i1=123;

            int i2=456; 

            float f1 = (float) ((i1+i2)*1.2);//容量大的类型转换为容量小的类型时,要加上强制转换符

            示例二:

            short i=99;

            char c=(char)i;  

            System.out.println(c);  


            示例三:

            byte b1=1;

            byte b2=2;

            byte b3=(byte)(b1+b2); //byte,short,char在计算时首先转换为int,大容//量(int)转换为小容量的类型(byte)时要加强制转换


            特  例:

            byte t = 127;//不报错

            int a = 127;

            //需要强制转换才不报错:编译器只看容器【只看类型】不看值

            byte b = (byte)a;System.out.println(b); // 结果为 127

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容