我最近在学习JAVA,在学习之余,会记录笔记。我每隔几天会分享一下我的学习心得,来和大家一起学习。
一.byte类型
byte类型是JAVA中最小的数据类型,数据大小是-2^7~2^7-1,也就是-128~127.
byte max= Byte.MAX_VALUE;
byte min= Byte.MIN_VALUE;
System.out.println(max);
System.out.println(min);
输出:127
-128
我们要思考一个问题,byte是占用八个字节,那么为什么范围是-128~127呢? 首先,在Java中,除了char类型和boolean类型以外,其他基本数据类型都是有符号的,也就是最高位1为负数,最高位0为正数
byte b= (byte) 0b11111111;
System.out.println(b);
输出:-1
byte b= (byte) 0b00000001;
System.out.println(b);
输出:1
现在系统讲解一下这个二进制是怎么工作的:
首先最开始0b是二进制的意思,b就是binary,是二进制的意思,然后是后面的二进制工作方式。
计算机里有三种存储,分别为原码,反码,补码。
首先是正数:原码=反码=补码,也就是说:
十进制:1
二进制:
原码:00000001
反码:00000001
补码:00000001
那么负数是这样的
十进制:-1
二进制:
原码:11111111
反码:1000000
补码:1000001
反码的意思是在原码的基础上,除了符号位以外,全部取反,比如11111111,除了第一位,剩下的所有数字都取反,也就是1变0,0变1,就变成了10000000,补码就是在反码的基础上加1,就变成了10000001,输出-1。
那么回到byte变量的范围,127就是01111111,即2^8-1=127。-128就是10000000
反码:11111111,即127,补码再加1就是128,再加上首位的1也就是负号,就是-128了。
二.int类型
int类型的范围-2147483648~2147483647:
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
输出:2147483647
-2147483648
这个就是一般使用的数据类型,日常使用应该是足够的。
三.long类型
long类型的范围:-9223372036854775808~9223372036854775807
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
输出:9223372036854775807
-9223372036854775808
这里要注意一下,上述的byte,int,long都是整型变量,也就是不能存储小数,下面介绍的float和double就是浮点类型的变量
四.float类型
float类型的范围1.4E-45~3.4028235E38:
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
输出:3.4028235E38
1.4E-45
这里要注意:浮点类型的标准是double,什么意思呢?打个比方,比如科学里距离的标准单位是m,质量是g,所以:
float a=1.2;
是不合法的,因为1.2默认为double类型,然而变量a是float类型,因为double和float类型的精确度是不一样的,所以转换的是否有可能会丢失精度,所以:
float a=1.2f;
这样就是合法的了,1.2f就是float类型的,就可以正常赋值了。
五.double类型
double类型的范围4.9E-324~1.7976931348623157E308:
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
输出:1.7976931348623157E308
4.9E-324
这时候可能有人要问了,long类型也才十进制下的十几位,这个double和float类型怎么这么牛逼,double都直接干到了10^308,这时为什么呢?
原来,double和float是不精确的,什么意思呢?
float t1=0.1f;
double t2=0.1;
System.out.println(t1==t2);
输出:false
由此可以看出,浮点数是不精确的,比较数字不要使用double和float,可以使用BigDecimal
六.char
这个就是字符类型,如下为使用方法:
char a;//定义
char b='a';//第一种赋值方式
System.out.println(b);
char c=65;//第二种赋值方式
System.out.println(c);
输出:a
A
第一种赋值方式就是非常简单的把字符a赋值给变量b,这里使用的是单引号,字符要使用单引号,字符串使用的是双引号。
第二种赋值方式是使用ASCLL码,具体这是个什么自己百度。再ASCLL编码中,65对应的是A,所以输出A。
int a=100;
a=a-'0';
System.out.println(a);
输出:52
这里的a是int类型,然后字符0由于int类型就强行转换为0对应的ASCLL码48,所以就相当于100-48=52.所以输出52。
然后是转义符,什么是转义符呢?
比如说,有一个题目要将名字为a的char类型赋值为‘,也就是把’(单引号)赋值给a,应该怎么写呢?
char a=''';
这样肯定会报错,那么怎么写呢?这时候就要使用转义符了:
char a='\'';
System.out.println(a);
输出:‘
还有一些转义符:
转义符 | 含义 |
\b | 退格(backspace) |
\n | 换行 |
\r | 回车 |
\t | 制表符(TAB) |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
七.boolean
这个就是一个布尔类型的变量,这个主要使用在程序的标记中,比如登陆成功后这个变量就有可能从false变为true。
boolean a=true;
System.out.println(a);
输出:true
这里就是声明了一个名叫a的boolean类型的变量,并且赋值为true。
这里要注意一点,这个和C++是有区别的,C++里可以给布尔类型赋值为数字,0为false,其他数字都是true,然而Java只能使用true和false
八.进制转换
int t1=65; //十进制
int t2=065; //八进制
int t3=0x65; //十六进制
int t4=0b1000001; //二进制
System.out.println(t1);
System.out.println(t2);
System.out.println(t3);
System.out.println(t4);
输出:65
53
101
65