Java第二天
关于byte、short、int、long的区别
- byte n1 = 3;在内存中的表示:0000 0011
- short n2 = 3;在内存中的表示:0000 0000 0000 0011
- int n3 = 3;在内存中的表示:0000 0000 0000 0000 0000 0000 0000 0011
- long n4 = 3;在内存中的表示0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011
整数类型使用细节
- Java各整数类型有固定的范围和字段长度,不受具体的OS(操作系统)的影响,以保证Java程序的可移植性
- Java的整型常量(具体值)默认为int型,声明long型常量后需加l或者L
- Java程序中变量经常声明为int型,除非不足以表示大数,才使用long
- bit:计算机中的最小存储单位。byte:计算机中基本储存单元,1byte = 8bit
- byte占用存储空间为1个字节,short为2个字节,int为4个字节,long为8个字节
浮点类型
类型 | 占用存储空间 | 范围 |
---|---|---|
单精度float | 4字节 | -3.403E38~3.403E38 |
双精度double | 8字节 | -1.798E308~1.798E308 |
PS:
- 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
- 尾数部分可能丢失,造成精度损失(小数都是近似值)
浮点数类型使用细节
-
Java各整数类型有固定的范围和字段长度,不受具体的OS(操作系统)的影响,以保证Java程序的可移植性
-
Java的整型常量(具体值)默认为double型,声明float型常量后需加f或者F
public class floatdetail{ public static void main(String[] args){ //float num1 = 1.1;//错误 float num2 = 1.1F;//正确 double num3 = 1.1;//正确 double num4 = 1.1f;//正确 } }
-
浮点数常量有两种表达形式
(1)十进制形式:如5.12 512.0f .512
(2)科学计数法形式:如5.12e2 [5.12*10^2] 5.12E-2 [5.12/(10^2)] -
通常情况下,应该使用double型,因为它比float型更精确
-
比较2.7与8.1/3
double num5 = 2.7; double num6 = 8.1/3; System.out.println(num5);//2.7 System.out.println(num6);//2.6999999999999997 if(Math.abs(num5 - num6) < 0.000001){ System.out.println("2.7和8.1/3相等"); }
字符类型使用细节
-
字符常量是用单引号(’ ')括起来的单个字符
-
Java中还允许使用转义字符**’\‘**来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’ ;
-
在java中,char的本质是一个整数,在输出时,时Unicode码对应的字符
-
可以字节给char赋一个整数,然后输出时,会对照相应的unicode字符输出[97 >> a]
-
char类型时可以进行运算的,相当于一个整数,因为它都有对应的Unicode码
public class chardetail{ public static void main(String[] args){ int n1 = 'a' + 'b'; char char1 = 'a' + 2; System.out.println(n1);//195 System.out.println(char1);//c char c1 = 'a'; char c2 = '\t'; char c3 = '黄'; char c4 = 97; System.out.println((int)c1);//97 System.out.println((int)c2);//9 System.out.println((int)c3);//40644 System.out.println(c4);//a } }
布尔值类型
不可以用0或者非0的整数替代false和true这点和c语言不同,在java中只能用false和true来对条件进行判断如if、while、for等等
基本数据类型转换
自动类型转换
当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型
数据类型按精度(容量)大小排序
char >> int >> long >> float >> double
byte >> short >> int >> long >> float >> double
int a = 'c';//正确
double d = 80;//正确
System.out.println(a);//99
System.out.println(d);//80.0
自动类型转换细节
-
有多种类型的数据混合运算时,系统会自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
int n1 = 10;//ok //float d1 = n1 + 1.1;//错误 n1 + 1.1 的结果类型时double //double dl = n1 + 1.1;//正确 float d1 = n1 + 1.1F;//正确 n1 + 1.1 的结果类型时float
-
当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换
-
(byte,short)和char之间不会相互自动转换
-
byte,short,char 他们三者可以计算,再计算时首先转换为int类型
byte b2 = 1; byte b3 = 2; short s1 = 1; // short s2 = b2 + s1;//错误 int s2 = b2 + s1;//正确 //byte b4 = b2 + b3;//错误
-
boolean不参与转换
-
自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
byte b4 = 1; short s3 = 100; int num200 = 1; double num300 = 1.1; //float num500 = b4 + s3 + num200 + num300;//错误,计算结果为double类型 double num500 = b4 + s3 + num200 + num300;//正确
强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符( ),但可能造成精度降低或溢出
public class forceconvert{
public static void main(String[] args){
int n1 = (int)1.9;
System.out.println("n1 = "+ n1);//n1 = 1
int n2 = 2000;
byte b1 = (byte)n2;
System.out.println("b1 = "+ b1);b1 = -48
}
}
强制类型转换细节
-
当进行数据类型的大小从大到小,就需要使用强制转换
-
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
public class forceconvertdetail{ public static void main(String[] args){ //int x = (int)10*3.5 + 6*1.5;//错误double >> int int x = (int)(10*3.5 + 6*1.5);//正确 System.out.println(x);//44 } }
-
char类型可以保存int的常量值,但不难保存int的变量值,需要强转
char c1 = 100;//ok int m = 100;//ok //char c2 = m;//错误 char c3 = (char)m;//ok System.out.println(c3);//d
-
byte和short类型在进行运算时,当做int类型处理
基本数据类型和String类型的转换
在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。
基本类型转String类型
语法:将基本类型的值+""即可
public class stringtobasic{
public static void main(String[] args){
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);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
System.out.println("======================");
System.out.println(num1);//123
System.out.println(num2);//123.0
System.out.println(num3);//123.0
System.out.println(num4);//123
System.out.println(num5);//123
System.out.println(num6);//123
System.out.println(b);//true
System.out.println(s5.charAt(0));//1
System.out.println(s5.charAt(1));//2
System.out.println(s5.charAt(2));//3
注意事项
- 在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,比如我们可以把"123",转成一个整数,但是不能把"hello"转成一个整数
- 如果格式不正确,就会抛出异常,程序就会终止