码迷,mamicode.com
首页 > 编程语言 > 详细

J4. Java基本程序设计结构之数据类型与精度问题

时间:2018-01-26 21:03:09      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:探讨   表达   情况下   img   多个   数据类型   void   八进制   引号   

1.1 数据类型

Java中的数据类型分为基本数据类型和引用数据类型两种。关于引用类型,我们在后面的学习中会逐渐理解的,这里不再赘述,重点介绍基本数据类型。在Java中有8种基本数据类型来存储数值、字符和布尔值,如图4.1所示。

 技术分享图片

图4.1   Java数据类型

1.3.1 整数类型

  整数类型用来存储整数数值,即没有小数部分的数值。可以是正数、负数,也可以是0。根据所占内存的大小不同,可以分为byte、short、int和long 4种类型。他们所占的内存和取值范围如表4.2所示。整数默认的类型为int型。

 技术分享图片

图4.2   整数类型(1个字节是8位)

1.3.1.1.byte型

  使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中分配内存空间最少的,只分配1个字节,取值范围也是最小的,只在-128~127之间,在使用时一定要注意,以免数据溢出产生错误。

【例4.1】定义byte型变量,并对其进行简单赋值操作,验证其几点要素;

package cn.basic.datatype.bytes;
public class BytePractice{
    public static void main(String[] args){
        byte a = 45 , b = 127 , c ;
        System.out.println(a+b);//整数类型的默认类型为int,所以再给byte类型进行运算时会先将其转换为int类型,然后进行运算
        //System.out.println(c); 我们声明了变量却未给其赋值,这里会报未初始化变量
        /* b = 128 ; byte类型的内存空间为1字节,取值范围为-128-127,所以这里会报损失精度的问题,但是仍然可以通过强制转型来解决,结果就是输出与实际数值不符,这是精度损失造成的
        System.out.println(b);*/
    }
}

注意:成员字段如果没有初始化,那么编译时会自动初始化为默认值。但局部变量如果没有初始化则会在编译时报错“变量未经初始化”;

1.3.1.2.Short型

  Short型是短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其赋值,也可以不进行赋值。系统给short型在内存中分配2个字节,取值范围也比byte大得多,在-32768~32767之间,虽然取值范围变大,但仍要注意溢出。

【例4.2】定义short型变量

short a = 23 ;   //定义short型变量a、b、c,并赋值给a、b

1.3.1.3.int型

  int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其赋值,也可以不进行赋值。int型变量取值范围很大,在-2147483648~2147483647之间,足够在一般情况下使用,所以是整数变量中应用最广泛的。Int类型是整数类型的默认类型。

【例4.3】定义int型变量

int a = 23 , b = 78 ;   ////定义int型变量a、b、c,并赋值给a、b

1.3.1.4.long型

  long型即为长整形,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量进行赋值时结尾必须加上“L”或“l”(因为I和i的大写相似,所以我们一般使用L,便于阅读。),否则将不被认为是long型,而会被默认作为int型处理,这时可能会出现溢出内存的错误。所以当数值过大超过int型范围时就用long型,系统分给long型8个字节,取值范围更大,在-9223372036854775808~9223372036854775807之间。

【例4.4】定义long型变量,并对其进行一些分析;

package cn.basic.datatype.longs;
public class LongPractice{
    public static void main(String[] args){
        long a = 3890 , b;     //当我们定义一个变量时如果他的数值超过int的范围,却又不对其进行末尾强制,
        //b = 922337203685477 ;        那么程序会将其当做int处理,则会发生错误,提示超出范围
        //System.out.println(b);    提示我们数值过大
        System.out.println(a);
        b = 922337203685477L;
        System.out.println(b);
        b = 922337203685477l;
        System.out.println(b);
        //b = 922337203685477 L;  我们在定义long型变量时要注意,初始化的后面紧跟"L"或"l",不能有空格的存在,否则会提示错误
        System.out.println(b);
    }
}

我们在定义long型数据时末尾最好加L,因为l和1是不好区分的;

上面的四种整数类型在Java程序中有3种表示形式,分别为十进制、八进制、和十六进制。

  • l 十进制表示法。十进制的表现形式,是我们现实世界最熟悉的一种表达形式了,即逢10进1,每位上数字最大为9,如120、99等都是十进制。
  • l 八进制表示法。八进制即逢8进1,每位上的数字最大是7,且必须以0开头。例如,0123(转换成十进制是1*8^2+2*8^1+3*8^0=64+16+3=83)、-123(转换成十进制数为-(1*8^2+2*8^1+3*8^0)=-(64+16+3)=-83)都是八进制。
  • l 十六进制表示法。实际上中国古代就有16进制,所谓的半斤八两就是如此,逢16进1,每位上最大数字是f(15),且必须以0X或0x开头。如0x25转换成十进制是37.

【例4.5】整数的各型运算

package cn.basic.datatype.integer;
public class IntegerPractice{
    public static void main(String[] args){
        byte a = 127 ;
        short b = 3276 ;
        int c = 214748364 ;
        long d = 21474836423444L ;
        long resultL = a + b + c + d ;
        //int resultD = a + b + c + d ;当一个高精度的数据类型向低精度转换时,会报可能损失精度的错误
        //int dd = (int)d;
        int dd = new Long(d).intValue();
        int resultD = a + b + c + dd ;
        System.out.println("结果为"+resultL);
        System.out.println("结果为"+resultD);
    }
}

  技术分享图片

1.3.2 浮点类型

  浮点类型表示有小数部分的数字。Java语言中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围,如图所示。浮点型默认的类型为double。

技术分享图片

1.3.2.1 float型

  Float型即为单精度浮点型,使用float关键字来定义float型变量,可以一次定义一个或多个变量并对其进行赋值,也可以不进行赋值。在对float型进行赋值时末尾必须加上“f”或“F”,如果不加,系统会将其默认作为double型来处理,float型的取值范围在1.4E-45~3.4028235E38之间。

【例4.6】对float型进行定义;

package cn.basic.datatype.floats;
public class FloatPractice{
    public static void main(String[] args){
        Float a = 1.4E-45F ;
        System.out.print(a);
    }
}

技术分享图片

1.3.2.2 double型

  double型即双精度浮点型,使用double关键字来定义double型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在给double型赋值时,可以使用后缀“D”或“d”明确表明这是一个double类型数据,但加不加并没有硬性要求,可以加也可以不加,double型变量的取值范围在4.9E-324和1.2976931348623157E-308之间。

  单精度和双精度的区别我们会在后面探讨数据精度中讲解。

【例4.6】定义一个double型变量和float型变量,并对它们进行赋值、运算和输出;

package cn.basic.datatype.doubles;
class DoublePractice{
    public static void main(String[] args){
        double a = 987.987123456789012D , b = 789.789879887918799d ;
        double c = 68.8978978977 ;
        float aa = 987.987123F ;        //当我们定义一个float型变量却又不对其进行末尾"F"或"f",那么会提示错误可能损失精度
        float d = 987.987123456789012F ;
        float e = 987.987153456789012F , f = 987.987144456789012f ;
        System.out.println(a+"和"+b) ;
        System.out.println(c) ;
        System.out.println(aa+"和"+d+"和"+e+"和"+f) ;
    }
}

 技术分享图片

1.3.3 字符类型

  Char型即字符类型。使用char关键字进行声明,用于存储单个字符,系统分配两个字节的内存空间。在定义字符型变量时,要用单引号‘’括起来。如‘s’表示一个字符,且单引号中只能有一个字符,多了就不是字符类型,而是字符串类型,需要用双引号进行声明。

  Java 字符采用 Unicode 编码,每个字符占两个字节,因而可用十六进制编码形式表示。【注:Unicode是全球语言统一编码,所有的字符都分配两个字节的空间】

  与C、C++语言一样,Java语言也可以把字符作为整数对待,由于Unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以Java中的字符几乎可以处理所有国家的语言文字。若想得到一个0~65536之间的数所代表的Unicode表中相应位置上的字符,也必须使用char型显式转换。

  在字符类型中有一种特殊的字符,以反斜线“\”开头,后跟一个或多个字符,具有特定的含义,不同于字符原有的意义,叫做转义字符,Java中的转义字符如下所示。

 技术分享图片

技术分享图片

注意:转义字符也是字符,所以在使用时同样要加‘’单引号。

【例4.7】创建一个类CharPractice,实现将Unicode表中某些位置上的一些字符以及一些字符在Unicode表中的位置在控制台上面输出。

package cn.basic.datatype.ch;
class CharPractice{
    public static void main(String[] args){
        int a = ‘d‘ , aa = 97 ;
        char b = 97 , c = ‘a‘ ;
        char d = ‘\\‘ , e = ‘\b‘ , f = ‘\n‘ , g = ‘\u2605‘ , h = ‘\u0052‘ ; //转义字符
        char i = ‘\u4e08‘;
        System.out.println(a+"和"+aa+"和"+b+"和"+c) ;
        System.out.println(d+"和"+e+"和"+"和"+g+"和"+h) ;
        System.out.println(f) ;
        System.out.println(i);
    }
}

技术分享图片

4.3.4 布尔类型

布尔类型又称逻辑类型,只有“true”和“false”两个值,分别代表布尔逻辑中的“真”和“假”,使用boolean关键字来声明布尔类型变量,通常被用在流程控制中作为判断条件。

【例4.8】声明一个布尔变量,并对其进行输出;

     boolean abc = true , cba = false ;
        System.out.println(abc+"还是"+cba) ;
        if(abc)System.out.println("真就是真!");
        else{
            System.out.println("假就是假!");
        }
        if(cba)System.out.println("真就是真!");
        else{
            System.out.println("假就是假!");
        }

 技术分享图片

J4. Java基本程序设计结构之数据类型与精度问题

标签:探讨   表达   情况下   img   多个   数据类型   void   八进制   引号   

原文地址:https://www.cnblogs.com/lin-jing/p/8001753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!