文章目录
十二.java数据类型
1.基本数据类型
数值型:整数类型,存放整数(byte[1],short[2],int[4],long[8])#浮点型(float[4],double[8])
字符型:char[2]
布尔类型:boolean[1],存放true和false
2.引用数据类型
类(class)//接口(interface)//数组[]
类型 | 存储空间 | 范围 |
---|---|---|
byte[字节] | 1byte | -128~127 |
short[短整型] | 2byte | -215~215-1 |
int[整型] | 4byte | -231~231-1 |
long[长整型] | 8byte | -263~263-1 |
3.整型的细节
java程序中整型变量默认为int型,声明long类型的变量后面需加上L或者l
java中声明常量为int型,除非不足以表示大数才使用long类型
bit是计算机中的最小存储单位,byte:计算机中基本存储单元,1byte=8bit
4.浮点类型
浮点型的分类
类型 | 占用存储空间 |
---|---|
单精度float | 4byte |
双精度double | 8byte |
浮点数=符号位+指数位+尾数位
尾数部分可能丢失,造成精度损失(小数都是近似值)
float num1 = 1.1; //fakse
float num2 = 1.1F; //true
double num3 = 1.1; //true
double num4 = 1.1f; //true
double num5 = .123; //等价与0.123
System.out.println(num5); //0.123
//科学计数法
System.out.println(5.12e2); //512
System.out.println(5.12E2); //0.0512
//通常情况下,应该使用double型,double要比float精准度更高
//[举例说明]
double num6 = 2.1234567891;
float num7 = 2.1234567891;
System.out.println(num6);
System.out.println(num7);
//浮点数使用陷阱 2.7和8.1/3
double num7 = 2.7
double num8 = 8.1 / 3 //2.7
System.out.println(num7); //2.7
System.out.println(num8); //无限接近2.7,但不等于2.7
if( num7 == num8 ) {
System.out.println("相等");
}
if(Math.abs(num7 - num8) < 0.000001) {
System.out.println("差值非常小,到我所规定的精度,认为相等");
}
System.out.println(Math.abs(num7 - num8));
//细节:如果是直接查询的小数或者直接复制,是可以判断相等的
5.字符型的使用与细节
char c1 = 'a';
char c2 = '\t';
char c2 = '韩';
char c2 = 97; //字符类型可以直接存放一个数字
字符型使用细节
1.字符型常量使用的单引号(‘’)括起来的单个字符,而双引号则是字符串类型的
2.char中可以使用转义字符
3.cahr 的本质是一个整数,在输出时,对应的unicode码对应的数值
4.直接给char赋一个整数,然后输出时,会按照对应的unicode字符输出
5.char运算时,相当于一个整数,都是它所对应的Unicode码
char c1 = 97;
System.out.println(c1);
char c2 = 'a';
System.out.println(int(c2)); //输出a对应的数字
char c3 = '席';
System.out.println(int(c3)); //输出席对应的ASCII码值
char c4 = 38889;
System.out.println(c4); //输出'韩'
System.out.println('a' + 10); //输出'107'
cahr c5 = 'b' + 1; //98 + 1 = 99
System.out.println(int(c5)); //99
System.out.println(c5); //输出'99'对应的字符
字符型存储到计算机中,需要将字符对应的码值找出来,例如:
存储:‘a’ == > 码值97 == > 二进制 == >存储
读取:二进制 == > 97 ==> ‘a’ ==> 显示
编码格式问题
编码格式 | 描述 |
---|---|
ASCII | 一个byte表示,一个128bit |
unicode | 固定大小,汉字和字母统一两个byte |
utf-8 | 字母1byte,汉字3byte |
gbk | 字母1byte,汉字2byte |
big5 | 繁体中文(香港,台湾) |
6.布尔类型
不可以用0或者非0的整数来代替false和true.这点和c不同
boolean isPass = true;
if(isPass == true) {
System.out.println("true");
} else {
System.out.println("false");
}
7.数据类型转换
低精度自动向高精度进行转换(char,byte,short不自动类型转换)
char——>int——>long——>float——>double
byte——>short——>int——>long——>float——>double
int num = 'a'; //char——>int
double d1 = 80; //int——>double
System.out.println("num"); //97
System.out.println("d1"); //80.0
自动类型转换细节
//多种类的数据混合时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
int n1 = 10;
float d1 = n1 + 1.1; //false,d1的结果是double类型
double d1 = n1 + 1.1; //true,d1的结果是double类型
double d1 = n1 + 1.1F; //true,d1的结果是float类型
int n2 = 1.1; //false,n2的结果是double类型
//char,byte,short不自动类型转换,把具体数值赋值给另外两种类型时候,要判断是否在该类型的范围之内,如果是就可以
byte b1 = 10; //对
int n2 = 1;
byte b2 = n2; //false,byte容纳不下int类型的数据
byte b3 = 1000; //false,byte的范围是-128~127
//char,byte,short 三者在进行运算的时候,在计算时首先转换为int型,运算过后都会变成int型
byte b2 = 1;
byte b3 = 1;
short s1 = 1;
short s2 = b2 + s1; //false,s2为int型
byte b4 = b2 + b3; //false,b4为int型
//boolean类型不参与数据类型的转换
boolean pass = true;
int num = pass; //boolean不参与类型的自动转换
//运算表达式的结果为类型提升到操作数中最大的类型
byte b4 = 1;
short s3 = 100;
int num200 = 1;
float num300 = 1.1F;
double num500 = b4 + s3 + num200 + num300; //num为bouble
强制类型转换
强制类型转换的时候,将容量大的数据类型转换为容量小的数据类型,使用的时候要加上强制转换符号,但是也可能造成精度降低或者益处,格外注意
1.进行数据的大小从大————小,就需要使用强制转换
2.强制转换只针对最近的操作数有效,往往会使用小括号提升运算的优先级
3.char类型可以保存int的常量值,但是不能保存int变量值
int i = (int)1.9;
System.out.println(i); //1,损失精度
int j = 2000;
byte b1 = (byte)j;
System.out.println(b1); //数据溢出
char c1 = 100;
int m = 100;
char c2 = m; //false
System.out.println(c3); //数据溢出
//下列数据能否通过编译
short s = 12; //true
s = s - 9; //false int->short
byte b = 10; //ok
b = b + 11; //false int->byte
b=(byte)(b+11); //true
char c = 'a'; //true
int i = 16; //true
float d = .314F; //true
double result = c + i + d; //true float->double
byte b = 16; //true
short s = 14; //true
short t = s + b; //false int->short
String类型的转换
-
基本类型转String类型
将基本类型的值+“” 即可
-
String类型转成基本数据类型
通过基本类型的包装类调用parseXX方法即可
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); System.out.println("========================="); 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); short num6 = Short.parseShort(s5); boolean b = Boolean.parseBoolean("true"); //如果里面的数据不为true或false,则结果返回false System.out.println(num1); //123 System.out.println(num1 + 1); //124 System.out.println(s5 + 1); //1231 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(1));//将s5字符串中的第二个字符取出来
在将string类型转换成基本数据类型时,要确保String类型能够转成有效的数据,可以把“123”转换为整数,但不能把“hello”转成一个整数,如果格式不正确的话,就会抛出异常,程序就会终止。
练习
//练习1:写出输出结果 int n1; n1 = 13; int n2; n2 = 17; int n3; n3 = n1 + n2; System.out.println("n3=" + n3); //输出30 int n4 = 38; int n5 = n4 - n3; System.out.println("n5=" + n5); //输出8 //练习2: //1.使用char类型,分别保存\n,\t,\r,\\,1,2,3等字符,并打印输出 char c1 = '\n'; //换行 char c2 = '\t'; //制表位 char c3 = '\r'; //回车 char c4 = '\\'; //输出\ char c5 = '1'; char c6 = '2'; char c7 = '3'; System.out.println(c1); System.out.println(c2); System.out.println(c3); System.out.println(c4); System.out.println(c5); System.out.println(c6); System.out.println(c7); //2.保存两本书名,用+拼接,看效果。保存两个性别,用加号拼接,看效果。保存两本书价格,用加号拼接,看效果。 String book1 = "狗子1"; String book2 = "狗子2"; System.out.println(book1 + book2); char c1 = '男'; char c2 = '女'; System.out.println(c1 + c2); double price1 = 123.453; double price2 = 120.11; System.out.println(price1 + price2); //3.编程实现如下的效果: // 姓名 年龄 成绩 性别 爱好 // xx xx xx xx xx //要求: //用变量将姓名,年龄,成绩,性别,爱好存储; //使用+ //添加适当的注释 //添加转义字符,使用一条语句输出 String name = "jack"; int age = 20; double score = 80.9; char sex = '男'; String hobby = "打篮球"; System.out.println("姓名\t\t年龄\t成绩\t\t性别\t爱好\n" + name + "\t" + age + "\t" + score + "\t" + sex + "\t" + hobby + "\t"); System.out.println("======================"); System.out.println("姓名"+"\t"+"年龄\t成绩\t性别\t爱好\n" + name + age + score + sex + hobby);