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类型进行存储,可能会超出精度。
内存中分配内存空间:
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类型进行存储,可能会超出精度。
相关文章推荐
- springmvc集成动态数据源
- Spring中注解标签的解释
- Java设计模式系列之工厂模式
- Spring自动注入properties文件
- Java实现RC4加解密
- Ubuntu 12.10 安装JDK7
- 一天一排序之“冒泡排序(Bubble_sort)”
- spring加载hibernate映射文件的几种方式(转)
- JVM的内存区域划分
- Eclipse中xml编程代码提示
- Java LinkedList特有方法
- spring
- MySQL通信协议栈Java实现-(2)协议包格式
- Struts2---声明式异常处理
- java动态代理(JDK和cglib)
- java--myeclipse中一些操作问题
- Java泛型-类型擦除
- java对象和json字符串互转
- java 空指针异常(java.lang.NullPointerException)
- 常用Keytool 命令