编程语言
首页 > 编程语言> > JAVA八股文——(二)基本数据类型

JAVA八股文——(二)基本数据类型

作者:互联网

总结梳理java八股文及其延展相关知识点(内容来源于各讲解文档的梳理总结)

(二)基本数据类型

1、整型:byte(8)、short(16)、int(32)、long(64)

1.1 byte(8)

8位、有符号(最高位0为+,1为-)的以二进制补码表示的整数
min :    -128(-2^7)
max:   127(2^7-1)
default: 0
对应包装类:Byte
能够表示258(2^8)个数据

1.1.1计算机基础知识补充
    <1>计算机存储有符号的整数是都是存储它们的补码。Java语言都是有符号位的。
    (所以按照计算机处理1111 1111的过程,首位是1,自然是负数,而且这是补码,那么对应的原码就是,先减1,变成1111 1110,符号位不变,其他取反,变成1000 0001,也就是-1!所以从10000001到11111111依次表示-127到-1)
 <2>正数和0的补码、反码是本身原码;所以对于正数来说,可以理解为不存在反码和补码。
<3>负数的反码是是符号位不变,其它位取反;补码是在负数的基础上加1(符号位不变)。
  <4>计算机中用补码进行加法运算。
( 在原码、反码、补码相互转换以及求对应的十进制求值时,符号位是绝不参与的,但是在加减过程中,是参与位运算的。)
1.1.2为什么会有补码、反码
反码是为了解决减法运算,补码是为了解决反码产生的±0的问题
1.1.3为什么最小值是-128而不是-127
8位二进制,使用原码或者反码表示的范围是[-127–127],而使用补码表示的范围为[-128~ 127]
那么-128为什么可以用100000000表示?
   这里我分析的是byte,它就8位。在无符号位的二进制中128的表示为1000 0000。有符号位的情况下byte好像无法表示+128或-128。
  如果我们假设byte不是占用8位,而是9位,最高位是符号位。你们-128的表示为1 10000 0000,计算其补码也是1 1000 0000,很神奇吧,一样的。-128补码尾8位就是1000 0000。那就规定1000 0000是-128的补码,而-128是没有原码和反码的,即不能利用10000 0000反推其反码和原码。

补码产生总结:
		1、对于如果大于8位的有符号整数数据类型,-128的补码尾八位刚好是1000 0000
		2、比如127(0111 1111)加1(0000 0001)刚好得到-128(1000 0000),-128(1000 0000)加1(0000 00001)等于-127(1000 0001)这样从-128~127的反码首尾相连,形成了一个闭环,就像时钟一样。
		3、在计算机中减法运算可以转换成加法运算 ,比如8-1——>8+(-1)——>补码运算:(0000 1000) + (1111 1111) = (0000 0111) 刚好是7。-128+127——>(1000 0000) + (0111 1111) = (1111 1111)刚好是-1,-128的补码完美的适用于减法。
同理byte的最小值-128、short的最小值-32768、int的最小值-2147483648都是用对应的-0的原码来进行表示

1.2 short(16)

		16位、有符号的以二进制补码表示的整数
		min :    -32768(-2^15)
		max:   32767(2^15 - 1)
		default: 0
		对应包装类:Short

1.3 int(32)

		32位、有符号的以二进制补码表示的整数
		min :    -2,147,483,648(-2^31)
		max:   2,147,483,647(2^31 - 1)
		default: 0
		对应包装类:Integer

1.4 long(64)

		64位、有符号的以二进制补码表示的整数
		min :    -9,223,372,036,854,775,808(-2^63)
		max:   9,223,372,036,854,775,807(2^63 -1)
		default: 0
		对应的包装类:Long

2、浮点型:float(32)、double(64)

2.1float(32)

单精度、32位、符合IEEE 754标准的浮点数
float 在储存大型浮点数组的时候可节省内存空间
浮点数不能用来表示精确的值,如货币
default: 0.0f
对应的包装类:Float

2.2double(64)

双精度、64位、符合IEEE 754标准的浮点数
浮点数的默认类型为double类型
double类型同样不能表示精确的值,如货币
default: 0.0d
对应的包装类:Double

3、布尔型:boolean(8)

boolean数据类型表示一位的信息
只有两个取值:true 和 false
这种类型只作为一种标志来记录 true/false 情况
对应的包装类:Boolean

4、字符型:char(16)

char类型是一个单一的 16 位 Unicode 字符
最小值是 \u0000(即为0)
最大值是 \uffff(即为65,535)
char 数据类型可以储存任何字符
对应的包装类:Character

5、类型转换

5.1自动类型转换
自动类型转换,也称隐式类型转换
转换规则:从存储范围小的类型到存储范围大的类型。
具体规则为:byte→short(char)→int→long→float→double
byte b=10;
short sh=b;
5.2强制类型转换
强制类型转换,也称显式类型转换
转换规则:从存储范围大的类型到存储范围小的类型。
具体规则为:double→float→long→int→short(char)→byte
语法格式为:(转换到的类型)需要转换的值
double d=3.14;
int i=(int) d;
5.3包装类过渡类型转换
xx.intValue(),xx.doubleValue()
5.4字符串与其它类型间的转换

5.4.1其它类型向字符串的转换

①调用类的串转换方法:X.toString();
②自动转换:X+"";
③使用String的方法:String.volueOf(X);

5.4.2字符串作为值,向其它类型的转换

①先转换成相应的封装器实例,再调用对应的方法转换成其它类型
②静态parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法

6、Java常量

6.1十六进制整型常量:以十六进制表示时,需以0x或0X开头,如0xff,0X9A。
6.2八进制整型常量:八进制必须以0开头,如0123,034。
6.3长整型:长整型必须以L作结尾,如9L,342L。
6.4浮点数常量:由于小数常量的默认类型是double型,所以float类型的后面一定要加f(F)。同样带小数的变量默认为double类型。
如:float f;
    f=1.3f;//必须声明f。
6.5字符常量:字符型常量需用两个单引号括起来(注意字符串常量是用两个双引号括起来)。Java中的字符占两个字节。一些常用的转义字符:
①\r表示接受键盘输入,相当于按下了回车键;
②\n表示换行;
③\t表示制表符,相当于Table键;
④\b表示退格键,相当于Back Space键;
⑤\'表示单引号;
⑥\''表示双引号;
⑦\\表示一个斜杠\。

7、Java引用数据类型

Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注
引用类型:底层结构和基本类型差别较大
JVM的内存空间:
(1). Heap 堆空间:分配对象 new Student()
(2). Stack 栈空间:临时变量 Student stu
(3).Code 代码区 :类的定义,静态资源 Student.class

eg:Student stu = new Student(); //new 在内存的堆空间创建对象
stu.study(); //把对象的地址赋给stu引用变量
上例实现步骤:
a.JVM加载Student.class 到Code区
b.new Student()在堆空间分配空间并创建一个Student实例;
 c.将此实例的地址赋值给引用stu, 栈空间;

标签:JAVA,0000,数据类型,补码,反码,类型,128,八股文,1000
来源: https://blog.csdn.net/weixin_41612951/article/details/120936240