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 num1 = 2.7; double num2 = 8.1/3; System.out.println(num11);//2.7 System.out.println(num12);//接近 2.7 的一个小数,而不是 2.7 //错误的比较方法 if( num1 == num2) { 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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)