MacOs-JAVA开发3-数据类型
整数类型
byte short int long
Java各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证java程序的可移植性。
Java语言整型常量的三种表示形式:十进制整数、八进制整数、十六进制整数。
java语言的整型常量默认是int型
类型 | 占用空间 | 表数范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | -2147483648~2147483647 |
long | 8字节 | -2的63次方~2的63次方-1 |
浮点型
float double
与整数类型类似有固定的表数范围和字段长度,不受具体操作系统的影响
float | 4字节 | -3.403E38~3.403E38 |
---|---|---|
double | 8字节 | -1.798E308~1.798E308 |
字符类型
char ——存单引号引起来的文字 ‘1’ ‘100’ ‘a’ ‘A’
-
计算机识别char类型的文字,需要用ASCII编码表,此编码表可以让文字和计算机很好的交流
-
ASCII编码表就是将人类的文字和十进制数字进行对应组成一张表格
-
重点!!!——考点!!!
-
‘0’—— 48
-
‘a’—— 97
-
‘A’—— 65
编码史
* ISO-8859-1(Latin-1),国际化标准组织ISO规定的,支持西欧语言,它不支持中文,向上兼容了ASCII码表 * GBK2312/GBK/GBK18030,计算机开始向亚洲发展,中文(简体),韩文,日文等 * 大五码<big5>:中文(繁体) * 最后,出现了全球文字的编码,unicode编码,它有多种体现:UTF-8,UTF-16,UTF-32 * Java语言的源代码采用的是unicode编码 char d = '我';//一个中文汉字占2个字节,char也是占2个字节 System.out.print('\n');//\n表示换行符号 System.out.print('\t');//\t缩进Tab
布尔型
true false
boolean适用于逻辑运算符,一般用于流程控制语句。
boolean类型数据只允许取true(1)或false(0).
基本数据类型的转换
(除了boolean类型其他7种类型类型都可以转换!!!)
- byte 1 short 2 int 4 long 8
- float 4 double 8 char 2
1.自动类型转换:小容量向大容量转换
规则:byte<short(char)<int<long<float<double
注意*
在基本数据类型自动转换上,整型永远小于浮点型,不论字节空间大小是多少
2.强制类型转换:大容量向小容量的转换——不建议经常使用的!!!
需要加上强制类型转换符,程序才能编译通过,但是运行阶段会出现一些问题
public class DataTypeTest03 {
public static void main(String[] args) {
//1.自动类型转换
byte a = 1;
int b = a;
System.out.println(b);//1
//2.=右边的数据没有提前声明是什么类型,如果是整数,默认是int类型,如果是小数,默认是double
/*
* 笔试题:以下选项的代码哪一个书写有误?
* 第25行代码涉及到了基本数据类型的自动转换
* 第26行代码标准的long类型变量的声明和初始化
*/
long c = 100;//把一个int类型的整数100赋值给long类型变量c——基本数据类型的自动转换
long d = 100L;//把一个long类型的整数100赋值给long类型变量c——标准的long类型变量的声明和初始化
//3.强制类型转换
long x = 100L;
int y = (int)x;//加强制类型转换符
int i = 156;
byte j = (byte)i;
//4.笔试题:以下选项的代码哪一个书写有误?
/*
* int类型的数据直接赋值给byte,short,char类型的变量,如果值没有超出
* byte,short,char的取值范围,就是可以直接赋值的,不用强制类型转换
*/
byte k = 127;//把一个int类型的整数127赋值给byte类型的变量k,值没有超出byte范围是可以直接赋值的
byte k1 = (byte)128;//byte -128~127,128已经超出byte范围,就不能直接赋值,需要强制类型转换
//5.整型和浮点型的转换
double n = 2.56;
int m = (int)n;
System.out.println(m);//2
//6.强转存在的问题——数据溢出
//所以当int类型向short、byte类型强制类型转换时出现一些莫名其妙的值时
int o = 703;
byte b2 = (byte)o;
System.out.println(b2);//-65
}
}
数据溢出
当数据类型进行强制类型转换时,超出了数据表示范围就会出现数据溢出。比如:
int i = 703;
byte b = (byte)i;
System.out.println(b);
打印结果为-65 。
正确的解析过程应该是,703二进制表示应该是1010111111(由于i是int32位,所以前面应该很多个0凑集32位),但是byte只有8位容量,最终b=10111111(最左边的两位10被截取了)。 10111111直接转换成十进制是191,并不是-65 .那这个65 又是怎么得到的呢?
计算机的最高为是符号位,0表示正数,1表示负数。当为负数时,转换成十进制需要遵循这样一个规则。
1、首先按位取反,最高位符号位不需要转,10111111->11000000
2、再加1. 为11000001
3、最高位1表示负号-,1000001转换为十进制为65.所以最终结果为-65
所以当int类型向short、byte类型强制类型转换时出现一些莫名其妙的值时,都可以运用以上的规则进行解析。
Char数据转换
public class Demo05 {
public static void main(String[] args) {
byte num1=50;
byte num2=100;
//把num1和num2的值取出来,把转成int类型,然后再相加,然后再赋值
//int+int -> int
int num3=num1+num2;
System.out.println(num3);//150
char ziFu='A';//计算机底层只有数字
//底层会用一个数字来代表一个字符
//65来代表字符A
//一旦char进行了数学运算,就会把字符翻译成一个数字
System.out.println(ziFu+0);
//boolean能不能发生类型转换?
//boolean不能强转的
boolean b=true;
//int m=int(true); 错误的
//赋值操作 新的数据来了,旧的数据就覆盖了
//只能存储一个数据
b=false;
}
}