24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

Java编程基础:变量的定义和Java数据类型

2017-06-15 14:07:38 东方博宜 阅读

1   变量

1.1      变量的概述

1.     变量的概述        

              用于存储可变数据的容器。

2.         变量存在的意义

计算机主要用于处理生活中的数据,由于生活中存在大量的可变数据,那么计算机就必须具备存储可变数据的能力。

       比如:

 1.时间每一秒都在发生变化,根据不同的时间要有不同的处理方式。

              2.气象站会根据温度发布天气预报信号。

3.   变量的特点

正常情况下牛奶盒装的都是牛奶,而且会根据牛奶的多少去决定要多大的容量的牛奶盒,AB两位同学同时把牛奶盒放进篮子里面,但是需要区分两个牛奶盒是谁的,都需要在牛奶盒上做一个标志。

特点:

1.   必须要有大小

2.   存储一定格式的可变数据

3.   必须要有名字

1.2      变量的声明

根据上述变量的特点,所以我们声明一个变量的时候需要确定变量的大小,类型、名字三个特点:

                错误: 1024byte   temp = 1000000

错误原因,java有自己的变量类型。 

      1.2.1 变量的数据类型

1. 整型

  byte   代表一个字节的大小   8bit  2(8)   -128~127        256

 short  代表两个字节的大小  16bit  2(16)  -2(15)~2(15)-1

  int    代表四个字节的大小  32bit  2(32)  -2(31)~2(31)-1

  long   代表八个字节的大小  64bit  2(64)  -2(63)~2(63)-1

  如果一个数值没有采取特殊的处理,那么该整数默认的类型是int

  可以使用数值后面添加L或小写L改变默认的整数类型。

2. 浮点型

   float  代表四个字节的大小  32bit

   double 代表八个字节的大小  64bit

java程序中所有的小数默认的类型是double类型,所以需要使用特殊的符号改变默认的小数类型。

3. 字符型

    char   代表两个字节的大小  16bit  2(16)

    原理:将字符映射为码表中对应的十进制数据加以存储。

4. 布尔型

     boolean  占一个字节。只有truefalse两个值。

        1.2.2 变量的声明

格式: 数据类型 变量名字1 , 变量名字2 ,……变量名字n ,;

       案例:

              int i 声明了一个整形的变量。

              double d 声明了一个double数据类型的变量

           float  f 声明了一个float数据类型的变量。

备注:变量名的首字母都一般都是以小写字母开始。

      1.2.3 变量的初始化

      1.2.4 变量的初始化方式

初始化方式1 数据类型  变量名字  = 数值。

初始化方式2 数据类型  变量名字 , 变量名字 = 数值。

案例

         方式1 double d = 3.14;

         方式2 double d ;  d = 3.14 ;

2   java数据类型的转换

Java中可以进行不同数据类型的加减乘除运算吗?是可以的。在算术运算符中已经体验过如果两个整数(int)相除会去掉小数部分。如果需要保留小数部分,可以让除数或者被除数变为double类型的(5变为5.0)。其实Java是自动的将int的那个数变为了double类型了也就是Java自动的将整数变为了浮点数。例如5/2.0 其实是5.0/2.0

1、 自动类型转换(也叫隐式类型转换)

    可以将一个数赋值给更大数值范围的变量,例如可以经byte 变量赋值给short变量可以将short变量赋值给int变量可以将int变量赋值给long变量。

Java内部其实做了工作就是自动将数值进行了类型提升,就叫做自动类型转换(也叫隐式类型转换)

byte b = 1; //00000001

       short s = b;  //00000000 00000001

       int i = s;

       long lon = i;

       double d = lon; //1.0

 

自动类型转换(也叫隐式类型转换)

要实现自动类型的转换,需要满足两个条件,第一两种类型彼此兼容,第二目标类型取

值范围必须大于源类型。所有的数字类型,包括整形和浮点型彼此都可以进行转换。

例如:

byte b=100;

       int x=b;

       System.out.println(x);//程序把b结果自动转换为int类型。

 

2、 强制类型转换(也叫显式类型转换)

不可以将一个数值赋给范围更小数值范围的变量,除非进行类型转换。

byte b = 100;

       b = b + 2;

       System.out.println(b);

上述例子发生了什么,发生了类型转换。

b+2 遇到了加法运算,2默认是int类型,byte类型b变量存储的值自动类型提升为

int类型。执行完加法运算后的结果就是int类型,想要将int的类型值放入到byte类型变量b中,无法放入,编译报错。

 

byte b=1;

       b=(byte)(b+2);

 

当两种类型彼此不兼容,或者目标类型取值范围小于源类型(目标是byte源是int

无法自动转换,此时就需要进行强制类型转换。

强制类型转换需要注意:

    损失精度!!!

int a=128;

       byte b=(byte)a;

       System.out.println(b);//-128

       /*

        * 此时的强转已经造成了数值的不准确

       */

   int

00000000

00000000

00000000

10000000

                                                      

 

10000000

                                                       byte                  

再次分析此行代码

byte b = 100;

b = b + 2;

       System.out.println(b);

  编译:提示如下错误。

   图片.png

                          

3、类型转换的原理

可以把byte 理解为1两的碗,short 2两的碗,int 4两的碗,long 8两的碗。1两碗的满碗酒可以倒入 2 4 8两的碗中。但是 4两碗的酒倒入1两碗的酒就有一些问题。

1、 什么时候要用强制类型转换

   比如小数部分只想保留整数部分.

   一定要清楚要转换的数据在转换后数据的范围内否则会损失精度.

public static void main(String[] args) {

       byte b = 100;

       b = (byte) (b + 2);

       System.out.println(b); // 102

        //舍弃小数部分

        double d=5.5;

       int num=(int)d;

}

 

2、 表达式的数据类型自动提升

算术表达式,逻辑表达式                                   

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

分析 System.out.println(‘a’+1)结果?

自动类型提升

  

byte b = 3;

       int x = 4;

       x = x + b;// b会自动提升为int 类型参与运算。

       System.out.println(x);// 7

 

 

强制类型转换

 

byte b = 2;

       /*

        * 强制类型转换,强制将b+2强制转换为byte类型,再赋值给b

        */

       b = (byte) (b + 2);

       System.out.println(b);// 4

思考1

byte  b=126;

问:既然数据默认的有数据类型,那么126 默认是int类型的,为什么存储到byte类型时不会报错呢。

126 是常量java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。

思考2byte b=128;能否正常的编译和运行。

该语句会出现编译错误,128超出了byte变量的存储范围,所以出现编译错误。

思考2

byte b1=3b2=4b;

b=b1+b2

b=3+4

哪一句编译失败?为什么?

b =3+4 34都是常量,所以java在编译时期会检查该常量(每个常量)是否超出byte类型的范围。如果没有可以赋值。例如b=128+1 就无法编译通过。b=127+1;也是无法通过。

b =b1+b2 不可以,因为b1 b2 是变量,表达式求值时,变量值会自动提升为int型,表达式结果也就成了int型,这是要赋值给byte型的b,必须进行强制类型转换了。

6System.out.println(‘a’+1)结果

美国人为了让计算机识别他们生活中的文字,让二进制表示生活中的文字.所以一个字母代表了一个二进制.,二进制也有十进制的表现形式.,把生活中的字母都用数字来标识,例如97 代表a 98 代表 b。打印’a’就把a作为输出显示,没有疑问。但是 ‘a’+1  有加号涉及到了运算。根据java自动类型提升规则,同样道理 char 提升为int 。就把’a’代表的数字体现了出来。a 表示的是97  97+1就是98; 那么 想要查看98 表示的char 是什么 怎么实现呢 ?就要用到刚才介绍的强制类型转换了 System.out.println(char(‘a’+1));就取到了98 ASCII码表中表示的字符。大写A 和小写a ASCII有不同的表现。还有一个概念字符’1’ ASCII 不是数字 1,可以运行代码查看,到此就可以明白了char 类型,char类型也是可以参与运算的,为什么可以参与运算呢。因为字符在ASCII表中都有对应的数字体现。所有的计算机兼容ASCII

        System.out.println('a'+1); //98

       System.out.println((char)('a'+1));  //b

补充问题:

       int i='a'+'b';

       System.out.println(i);//结果?     

       System.out.println("hello"+'j'); //结果?

总结:

所有数值运算符都可以用在char型数据上,如果另一个操作数是一个数字或者字符,那么char会自动提升为int型,如果另一个操作数是字符串,那么字符就会和字符串相连。


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn