Java 7之基础类型第1篇 - Java数据类型
2014-02-23 20:23
169 查看
一、数据类型
Java主要有如下几种数据类型1.整数类型
1) 在Java中,整数类型共有4种,它们有固定的表述范围和字段长度,且不受具体的操作系统的影响,保证了Java的跨平台性2) Java语言中,整数有三种表现形式,分别是:
a. 十进制整数,如 120, -31, 0
b. 八进制整数,要求以0开头(注意这是数字0,不是字母o),如:012,
c. 十六进制整数,要求以0x开头(注意这是数字0,不是字母o),如: 0x12
3) Java语言中,默认的整数类型是int类型,声明long类型的时候,后面必须要加个l或者L
4) Java中四种整数类型的表述范围:
有必要说明一下表数范围,以byte类型为例:
由于byte是8位的,当最高位为符号位时,表示的最大整数就是二进制:0111-1111,也就是2^7-1=127
而能够表示的最小负数的二进制表示形式为:1111-1111,按理说应该为-127.但是我们都知道byte占8位。则不同的组合为2的8次方等于256,也就是byte最多可以表示256个不同的数,
0~127:128个
-0~127:128个
但是这里0与-0表示一样的数了,所以就用-0的二进制补码表示到-128里面去了。(注意:0与-0的二进制表示形式不一样,一个为0000-0000,另外一个为1000-0000)其他的就类似了。
2.浮点类型
1) 与整数类型一样,同样有固定的表述范围和字段长度,且不受具体的操作系统的影响,保证了Java的跨平台性2) Java语言中,浮点类型有两种表现形式,分别是:
a. 十进制数形式, 如3.14
b. 科学计数法,如,3.14e2, 3.14e-2, -3.14E2
3) Java语言中,默认的浮点数类型是double,声明float类型的时候,后面必须添加字母f或者F,如3.14F,3.14f。
例如:float a=5.6f;//直接将5.6给float赋值是错误的,5.6默认的类型为double。
而如果将float a=5;这样复制后,编译就不会报错,只是将5看作默认的double类型,打印输出值为5.0。
4) Java中两种浮点类型的表述范围:
其实在实际的应用中,如果要进行精确的小数计算或者是大数计算,建议使用java.math.BigDecimal类。例如使用这个类进行除法的计算:
public static double div(double v1,double v2) { return div(v1,v2,10); } /** * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 */ public static double div(double v1,double v2,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be a positive integer or zero"); } BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); }
3. 字符类型
1) 字符类型是用''单引号括起来的单个字符,例如char c = 'w'; char a = '中',可以看到Java中的char类型是可以表示中文字符的;2) Java字符采用Unicode(全球语言统一编码)编码,每个字符占两个字节,因而可用16进制编码形式表示,如:char c = '\u0061'
3) Java中允许使用转义字符'\'将其后面的字符转换成其他含义, 如: char c = '\n'; //表示换行
4.布尔类型
1) boolean类型的值只有两种:true,false2) boolean类型不可以转换为其他的数据类型,所以有过C语言编程基础的人可能认为1也能在Java中表示为true,这是错误的。
在C语言中是不存在bool类型的,但是0可以表示假,任何的非0可以表示真,包括负数。
5.基本数据类型的转换
1) boolean不可以转换为其他的数据类型2) 整数型,浮点类型,字符型是可以相互转换的,转换时遵守下面的原则:
a. 容量小的类型自动转换为大的类型,数据类型按容量大小排序为:
byte, short, char < int < long <float < double
b. byte, short, char 三种类型间不会相互转换,他们三者在计算时,首先会转换为int类型
c. 容量大的类型在转换为小的类型的时候,必须加上强制转换符,此时可能造成精度降低或者溢出问题
d. 有多种数据类型混合计算的时候,系统首先自动转换为容量最大的那个类型再来继续计算
e. 实数类型默认为double类型,如, 1.2; 整数类型默认为int类型,如 1
如图所示:
二、数据类型对应的包装类
先介绍Java基本类型对应的8个包装类型,如下图所示。为什么要使用包装类型呢?
1. 更加体现了面向对象的特点,有人说java不是纯面向对象语言,纯度只有百分之九十,就是因为java中仍然使用了基本数据类型和static。而包装类的出现,则更好的体现了面向对象的设计理念。
2. 由于包装类型本质是一个类,有属性有方法,所以就比基础类型的功能强大了许多。假如需要将一个字符串的类型转化为整数,这时候怎么办?就需要包装类型的方法了。
String x="123"; int p=Integer.parseInt(x); Integer p2=new Integer(x);
3.在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.
下面是包装类型中共有的一些方法,这些方法也是在项目开发中经常使用的。
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);
这里的equals()方法比较的原始的基础类型,其jdk7原代码如下:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
7、生成字符串表示法的toString()方法,如obj.toString().
三、注意问题
1、int和Integer区别(1)包装类和原始类型的区别。int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类,类中提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,能够表示整数的最大值和最小值的常量等等。
(2)初始默认值不同。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。
在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。
在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。
相关文章推荐
- Java 7之基础类型第1篇 - Java数据类型
- 零、JAVA基础知识--数据类型和字符串
- JDK框架简析--java.lang包中的基础类库、基础数据类型
- java夯实基础-基本数据类型
- Java基础-02总结关键字,标识符,注释,常量进制,变量数据类型
- 小白成长记——Java基础之基本数据类型与字符串的相互转换
- 简谈JAVA基础--数据类型
- java基础数据类型与字符串之间的转换
- java基础(二)-数据类型
- Java基础——数据类型
- java语言基础(10)——类型强制转换时的数据溢出计算
- java基础(3)--数据类型
- JAVA基础(一) 基本数据类型
- java基础之第一节:数据类型
- java基础-----String和基本数据类型包装类
- 黑马程序员--java基础复习之String类StringBuffer及基本数据类型包装类
- 再学Java基础(1)标识符,变量,数据类型。
- java基础知识:数据类型,switch语句,分支结构
- Java基础视频教程第13天_String类、基本数据类型包装类
- Java基础-Java中的简单数据类型详解