java中的变量

java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型。在内存中分配了不同大小的内存空间。

 

内存中分配内存空间:

         byte        8位2进制    1个字节

         short      16位2进制    2个字节

         int        32位2进制    4个字节

         long       64位2进制    8个字节

         char       16位2进制    2个字节

 

注意:

    1.过大整形时表示长整形的数据long q = 1234567891234L

        后面加标识L,这里才会用8个字节(64位)的空间对数据进行存储。

    

    2.float y=3.4f;  //小数默认的是double.

 

    3.如果char ch=a; 这里的ch就是个变量了。应该为char ch=’a’;这时ch表示的字符常量a。字符型里面装一个字母, char ch=’ab’;这是不对的。如果是中文字是可以的,char是两个字节,char ch=’你’; 是对的

 

    4. boolean a=true; //false 。在其他语言里可以出现true+2等运算,但是Java里不可以。

 

    5. 定义一个字符串,是数据类型String s=“abcderf”; String 不是基本的数据类型,是个对象。

 

 

变量运算细节

 

    表达式的数据类型自动提升很多教程里面都是这么讲的

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

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

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

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

    

 

1.自动类型提升(在数值类型中可以)(也叫隐式类型转换)  

       byte b = 3;

       int x = 4;

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

 

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

      byte b = 3;

      b = b + 4;  // 报错(等号左边的b是byte类型。右边b加上4后,b自动提升为int  类型。类型不统一)     

      b = (byte)(b+4); //强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。(用的不多,容易丢失精度)

    如果 b=127; b= (byte)(b+4);结果就是b= -125。

    因为127转为byte类型,内存二进制数值为01111111,

      127+4=131,自动类型提升,内存空间为00000000  00000000  00000000  10000011,

    对131二进制取反,为1000 0011 ,对应的十进制为-125。

 

思考:

    byte b1=3,b2=4,b;

    b=b1+b2;

    b =b1+4;

    b=3+4;

哪句是编译失败的呢?为什么呢?

 

    b=b1+b2;    b =b1+4;(自动类型提升)

    这两句是错的,编译器做了一个判断,判断正确后会进行数据类型的转换,判断不正确,为了保证严谨性,会有编译错误的提示,可能损失精度。是因为b1和b2是变量,因为变量的值会变化,不确定具体的值,所以默认使用int类型进行存储,可能会超出精度。

posted @ 2016-04-15 09:55  xuejiaqiang88  阅读(178)  评论(0)    收藏  举报