整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
*注意:byte short char 之间不会相互转换,它们三者在计算的时候先转换为int类型
数据类型转换必须满足如下规则:
1. 不能对boolean类型进行类型转换。
2. 不能把对象类型转换成不相关类的对象。
3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
4. 转换过程中可能导致溢出或损失精度,例如:
int i =128;
byte b = (byte)i;
因为byte类型时8位,最大值为127,所以当强制转换为int类型值128时候就会导致溢出。
5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
(int)-45.89f == -45
必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
运行结果为:
char自动类型转换为int后的值等于97
char类型和int计算后的值等于66
解析:c1的值为字符‘a‘,查ascii码表可知对应的int类型值为97,‘A‘对应值为65,所以i2=65+1=66。
1. 条件是转换的数据类型必须是兼容的。
2. 格式:(type)value type是要强制类型转换后的数据类型 实例:
运行结果:
int强制类型转换为byte后的值等于123
1. 整数的默认类型时int
2. 浮点型不存在这种情况,因为在定义float类型时必须在数字后面跟上F或者f
基本数据类型:byte,int, short, long, boolean,char, float,double等
基本类型(primitive type)
不用new来创建变量,而是创建一个并非是“引用”的“自动”变量。这个变量拥有它的“值”,并置于堆
栈中,因此更加高效。要确定每种基本类型所占存储空间的大小。
基本类型 大小 最小值 最大值 包装器类型
boolean - - - Boolean
char 6bit Unicode 0 Unic ode 2(16)-1 Character
byte 8bit -128 +127 Byte
short 16bit -2(15) 2(15)-1 Short
int 32bit -2(31) 2(31)-1 Integer
long 64bit -2(63) 2(63)-1 Long
float 32bit IEEE754 IEEE754 Float
double 64bit IEEE754 IEEE754 Double
void - - - Void
Java整型
int | 4字节(32位) | -2147483648 ~ 2147483647 (正好超过20亿) |
short | 2字节(16位) | -32768 ~ 32767 |
long | 8字节(64位) | -9223372036854775808 ~ 9223372036854774807 |
byte | 1字节(8位) | -128 ~ 127 |
浮点类型
float | 4字节(32位) | 大约±3.40282347E+38F (有效位数为6-7位) |
double | 8字节(64位) | 大约±1.79769313486231570E+308 (有效位数为15位) |
一些需要注意:
浮点数值不适合用于禁止出现舍入误差的金融计算中。例如System.out.println( 2.0 - 1.1);将打印0.899999999999999,而不是0.9。因为浮点数值采用二进制系统表示,而二进制无法精确表示分数1/10,就像十进制无法精确表示1/3一样。如果需要在数值计算中不含有舍入误差,就应该使用BigDecimal类。
一、 包装类(Wrapper Class)共同的方法
值得说明的是,java是可以直接处理基本类型的,但是在有些情况下我们需要将其作为对象来处理,这时就需要将其转化为包装类了.所有的包装类(Wrapper Class)都有共同的方法,他们是:
(1)带有基本值参数并创建包装类对象的构造函数.如可以利用Integer包装类创建对象,Integer obj=new Integer(145);
(2)带有字符串参数并创建包装类对象的构造函数.如new Integer("-45.36");
(3)可生成对象基本值的typeValue方法,如obj.intValue();
(4)将字符串转换为基本值的 parseType方法,如Integer.parseInt(args[0]);
(5)生成哈稀表代码的hashCode方法,如obj.hasCode();
(6)对同一个类的两个对象进行比较的equals()方法,如obj1.eauqls(obj2);
(7)生成字符串表示法的toString()方法,如obj.toString().
转换关系:
基本类型------>包装器类
Integer obj=new Integer(145);
包装器类------>基本类型
int num=obj.intValue();
字符串------>包装器类
Integer obj=new Integer("-45.36");
包装器类------>字符串包装器类
String str=obj.toString();
字符串------>基本类型
int num=Integer.parseInt("-45.36");
基本类型------>字符串包装器类
String str=String.valueOf(5);
在一定的场合,运用java包装类来解决问题,能大大提高编程效率.
二、JDK1.5的新特性:自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
java 提供两种不同的类型:引用类型(或者封装类型,Warpper)和原始类型(或内置类型,Primitive)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 from:http://community.csdn.net/Expert/topic/3666/3666081.xml?temp=.9687921 int 是基本类型,(int)(Math.Random()*100)就是一个数,可以进行加见乘除。 Integer是class ,那么 new Integer(temp)就是一个对象了,可以用到Integer这个class的方法,例如用intvalue()可以返回这个int的值。 |
原文:http://www.cnblogs.com/breezejin/p/6357535.html