数据类型
Java中数据类型分为基本数据类型和引用数据类型。基本数据类型有 8 种,分别是字节型(byte) 、短整型(short) 、整型(int) 、长整型(long)、单精度浮点型(float) 、双精度浮点型(double)、字符型(char) 、布尔型(boolean)。引用类型有类、接口、数组。这里我们主要来了解基本数据类型和一些使用细节。
注:[ ]里的数代表类型所占字节数
整数类型
Java 的整数类型就是用于存放整数值的,比如 1 , 15, 100 等等
它们所占内存的大小也决定着它们可以存放的数值范围:
byte: -128 ~ 127
short: -332768 ~ 32767
int: -2147483648 ~ 2147483647
long: -2^63 ~ 2^63-1(^63表示63次方)
整型的使用细节
1、java各数据类型所占内存有固定的大小,不会受操作系统影响
2、Java的整型常量默认为int型,声明long型时必须在后面加上‘l’或者‘L’
int n1 = 1;//4 个字节
int n2 = 1L;//错误
long n3 = 1L;//对
3、java程序中数值变量常声明为int型,除非不足以表示才用long
浮点类型
Java 的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12 等等
单精度float占用4个字节,范围为: -3.403E38 ~ 3.403E38
双精度double占用8个字节,范围为: -1.798E308 ~ 1.798E308
浮点型的使用细节
1、浮点数在机器中存放形式,浮点数=符号位+指数位+尾数位
2、尾数部分可能丢失,造成精度损失(小数都是近似值)
3、java的浮点型常量默认为double型,声明float型常理,必须在后面加上‘f’或者‘F’
float num1 = 1.1; //错误
float num2 = 1.1F; //对
double num3 = 1.1; //对
double num4 = 1.1f; //对
4、浮点型常量有两种表示形式:
1)十进制数形式:5.12 52.14 .520(小数点前面的零可以省略,但小数点必须有)
double num5 = .123; //等价 0.123
System.out.println(num5);
2)科学法计数形式: 5.12E2(5.12*10的2次方) 5.12E-2(5.12*10的-2次方)
System.out.println(5.12E2);//512.0
System.out.println(5.12E-2);//0.0512
5、通常情况下用double型,因为它比float型更精准,不容易丢失精度
double num9 = 2.1234567851;
float num10 = 2.1234567851F;
System.out.println(num9);//2.1234567851
System.out.println(num10);//2.1234567
6、浮点数使用的一个陷阱:2.7 和 8.1 / 3 比较
看下面的一段代码
double num11 = 2.7;
double num12 = 8.1/3;
System.out.println(num11);//2.7
System.out.println(num12);//接近 2.7 的一个小数,而不是 2.7
//错误的比较方法
if( num11 == num12) {
System.out.println("num11 == num12 相等");//不会输出
}
//正确的比较方法
//是以两个数的差值的绝对值,在某个精度范围类判断
if(Math.abs(num11 - num12) < 0.000001 ) {
System.out.println("差值非常小,到我的规定精度,认为相等");
}
字符类型
字符类型可以表示单个字符,字符类型是 char,char 是2个字节(可以存放汉字)
字符型的使用细节
1.字符常量是用单引号( ' ')括起来的单个字符,不是双引号(" ")。如:charc1= 'a'; charc2 = '中‘; charc3= '9';
2. Java中还允许使用转义字符 '\' 来将其后的字符转变为特殊字特型常量。例如: charc3= '\n' ;'\n'表示换行符
3.在java中char的本质是一个整数, 在输出时是unicode码对应的字符。
unicode码查询网址:http://tool.chinaz.com/ Tools/Unicode.aspx
4.可以直接给char赋一个整数, 然后输出时,会按照对应的unicode字符输出[97->a]
char c1 = 97;
System.out.println(c1); // a
char c2 = 'a'; //输出'a' 对应的 数字
System.out.println((int)c2)
5. char类型是可以进行运算的, 相当于个整数。 因为它都对应有Unicode码
布尔类型
1.布尔类型也叫boolean类型,boolean类型占1个字节,booolean类型数据只允许取值true和false,无null
2. boolean类型适于逻辑运算,一般用于程序流程控制:
if条件控制语句;
while循环控制语句;
do-while循环控制语句;
for循环控制语句:
基本数据类型转换
自动类型转换
当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
数据类型按精度(容量)大小排序为:
自动类型转换注意和细节:
1.有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
//系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
int n1 = 10; //ok
float d1 = n1 + 1.1;//错误 n1 + 1.1 => 结果类型是 double
double d1 = n1 + 1.1;//对 n1 + 1.1 => 结果类型是 double
float d1 = n1 + 1.1F;//对 n1 + 1.1
2当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
int n2 = 1.1;//错误 double -> in
3.(byte, short)和char之间不会相互自动转换。
//当把具体数赋给 byte 时,(1)先判断该数是否在 byte 范围内,如果是就可以
byte b1 = 10; //对 , -128-127
int n2 = 1; //n2 是 int
byte b2 = n2; //错误,原因: 如果是变量赋值,判断类型
char c1 = b1; //错误, 原因 byte 不能自动转成 char
4. byte,short, char 他们三者可以计算,在计算时首先转换为int类型。
byte b2 = 1;
byte b3 = 2;
short s1 = 1;
short s2 = b2 + s1;//错, b2 + s1 => int
int s2 = b2 + s1;//对, b2 + s1 => int
byte b4 = b2 + b3; //错误: b2 + b3 => in
5. boolean不参与转换
boolean pass = true;
int num100 = pass;//错误 boolean 不参与类型的自动转换
6.自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
强制类型转换
强制类型转换就是自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成 精度降低或溢出,格外要注意。
int i=(int)1.9;
System.out.println(i);
int j=100;
byte b=(byte)j;
System.out.println(b);
强制类型转换细节说明
1.当进行数据的大小从大——>小,就需要使用到强制转换
2.强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
int x=(int)10*3.2+5*1.2;
int y=(int)(10*3.2+5*1.2);
System.out.println(x);
System.out.println(y);
3. char类型可以保存int的常量值,但不能保存int的变量值,需要强转
char c1=100;//ok
int m=100;//ok
char c2=m;//错误
char c3=(char)m;//ok
System.out.println(c3);
4. byte和short, char类型在进行运算时,当做int类型处理。
基本数据类型和 String 类型的转
在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。
基本类型转String类型:
语法:将基本类型的值+""即可
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
System.out.println(s1 + " " + s2 + " "+s3+" "+s4);
String类型转基本数据类型
语法:通过基本类型的包装类调用parseXX方法即可
String s5 = "123";
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5)
更多内容请移步个人博客:乌托邦