您的位置:首页 > 编程语言 > Java开发

java中的变量

2016-04-15 09:55 363 查看
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类型进行存储,可能会超出精度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: