基本数据类型和引用类型的区别(基本数据类型和引用类型的数据存储区别)
你们好,最近小活发现有诸多的小伙伴们对于基本数据类型转换,基本数据类型这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 1.数据类型:
2、 在Java源代码中,每个变量都必须声明一个类型。Java数据类型可以分为两类:基本类型和引用类型。基本类型包括布尔类型和数值类型。数值型分为整型和浮点型。整数有五种类型:byte short int long char(char本质上是一种特殊的int)。浮点类型有浮点型和双精度型。梳理如下关系:
3、 2.基本类型:
4、 Java为基本类型提供了语言级的支持,即已经在Java中预定义好了,用相应的保留关键字来表示。基本类型是单个值,而不是复杂对象。基本类型不是面向对象的,主要是效率原因,但它也提供了基本类型的对象版本,即基本类型的包装器。您可以直接使用这些基本类型,也可以使用基本类型来构造数组或其他自定义类型。类型基本上有一个明确的值域和数学行为。
5、 2.1整数
6、 有整数字节short int long char,分别用8、16、32、64、16位表示。有些地方可能不把char归入integer的范畴,但本质上char type是int的子集。整数的宽度不应该看作是整数占用的内存空间,而应该理解为定义为整数的变量或表达式的行为。JVM可以随意使用任何大小的内存空间,只要类型的行为符合规范。Byte short int long都是有符号的,用二进制补码(two's-complement)表示。Char用16位表示,无符号,表示UTF-16编码集。
7、 2.1.1字节
8、 Byte用1字节8位表示,是最小的整数类型。主要用来节省内存空间。当操作来自网络、文件或其他IO的数据流时,字节类型特别有用。取值范围为[-128,127]。byte的默认值是(byte)0。如果我们试图给一个字节型变量赋一个取值范围之外的值,就会出现编译错误,比如byte b=128;此语句无法编译。一个有趣的问题,如果我们有一个方法:public void test(byte b)。试图这样调用这个方法是错误的:test(0);编译器会报错,类型不兼容!我们记得字节b=0;一点问题都没有。为什么这里出了问题?
9、 这就涉及到一个叫字面的问题,就是表面的价值。例如,整数文字在源代码中是5,0,-200。如果整数子面后跟L或L,则文字值是长类型。例如,1000L表示长类型值。如果不加l或l,则为int类型。基本类型中的Byte short int long可以由不带L的整型文字创建(姑且称之为int文字),比如byte b=100;短s=5;对于long类型,如果大小超过了int可以表示的范围(32位),就必须用l结尾表示,整数文字可以用不同的方式表示:十六进制[0X或0x],十进制[nothing],八进制[0]二进制[0B或0b]等。二进制文字是仅在JDK 7之后可用的函数。在赋值操作中,可以将int的文字值赋给byte short int long,Java语言会自动处理这个过程。如果方法调用不同,调用test(0)时,它能匹配的方法是test(int),当然不能匹配test(byte)方法。至于Java为什么不支持赋值操作之类的方法调用,就不得而知了。注意包装器和原始类型之间的自动转换(自动装箱,自动拆箱)。字节d=' A也是合法的,字符的文字值可以自动转换成16位整数。
10、 对byte类型进行数学运算时,会自动提升为int类型。如果表达式中有double或float类型,它也会被自动提升。所以下面的代码是错误的:
11、 1.bytes2=' a
12、 2.bytesum=s1 s2//should cast by(byte)/span/span/span
13、 简短
14、 用16表示,取值范围为[-2 ^ 15,2 ^ 15-1]。Short可能是最不常用的类型。只要不超出范围(16位),就可以通过整数或字符来赋值。当short类型参与运算时,它也被提升为int或更高的类型。(顺序是byte short int long float double)。
15、 国际
16、 3位,[-2 ^ 31,2 ^ 31-1]。由有符号二进制补码表示的整数。常用词控制循环。注意byte和short在运算中会提升到int类型或者更高。Java 8以后,可以用int类型表示无符号32位整数[0,2 31-1]。
17、 2.1.4长
18、 6位,[-2 63,2 63-1,默认值为0L]。当你需要计算一个非常大的数时,如果int不足以容纳大小,可以使用long类型。如果long不够,可以使用BigInteger类。
19、 2.1.5字符
20、 1位,[0,65535],[0,2 16-1],从' \u0000 '到' \ uffff '。无符号,默认值为' \u0000 '。Java Unicode字符集用来表示字符。Unicode是一个完全国际化的字符集,可以表示所有人类语言中的字符。Unicode需要16位宽,所以Java中的char类型也是用16位表示的。该赋值可能如下所示:
21、 char ch1=88
22、 char ch2=' A
23、 ASCII字符集占用Unicode的前127个值。之所以把char归为整数,是因为Java为char提供了算术运算支持,比如ch2然后ch2变成Y.当char执行加减乘除时,也转换为int类型,必须显式转换回来。
24、 2.2浮点型
25、 它包含单精度浮点和双精度浮点,分别用32位和64位表示,符合IEEE 754规范。
26、 浮动
27、 使用32位表示,对应单精度浮点数,比double运行速度更快,占用内存更少,但是当值很大或者很小时会变得不准确。当精度不高时,可以使用float类型声明一个赋值示例:
28、 1.f1=10L
29、 2.f1=10.0f
30、 3.//f1=10.0;默认值为double/span/span/span。
31、 可以给float类型赋byte,short,int,long,char,java会自动完成转换。
32、 双份
33、 64是指浮点子面赋给变量时,如果在文字值后没有用F或F显示,默认为double。java.lang.Math中的函数是双精度类型的。
34、 如果double和float都不能达到期望的精度,可以使用BigDecimal类。
35、 2.3布尔类型
36、 Boolean只有两个值,true和false,默认值为false。布尔与是否为0无关,但可以根据所需的逻辑进行转换。很多地方都需要布尔类型。
以上就是基本数据类型这篇文章的一些介绍,希望能帮助到大家。
扫描二维码推送至手机访问。
版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!