ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-10-24 21:05:32  阅读:205  来源: 互联网

标签:JAVA 0000 数据类型 补码 反码 类型 128 八股文 1000


总结梳理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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有