基本数据类型和包装类
2017-10-06 13:33
197 查看
Java中的数据类型包括(基本数据类型和引用类型)
基本数据类型(原生类、内置类型)8种
基本数据类型都是有符号的,而且它们的取值范围都是已经固定的。
byte
short
int
long
float
double
char
boolean
分类:
整数类型:(byte,short,int,long)
浮点类型:(float、double)
逻辑类型:(boolean)
字符类型:(char)
为什么需要装箱和拆箱
Java支持的数据类型包括两种:一种是基本数据类型,包含byte,char,short, boolean ,int , long, float,double;另一种是引用类型:如String等,其实是对象的引用,JVM中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。自动装箱就是Java**编译器**在基本数据类型和对应的对象包装类型间的转化,即int转化为Integer,自动拆箱是Integer调用其方法将其转化为int的过程
不同的数据的类型转换
隐式转换:从低精度向高精度进行转换。优先级:byte < short < char < int < long < float < double;
1.char隐式转换时会转换为与其对应的ASCLL码;
2.byte、char、short在参与运算的时候会自动转换为int型。但是使用“+=”不会产生类型转换。
3.基本类型不能和布尔型相互转换
eg:.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
对于s1 = s1 +1;由于执行s1 + 1 时会自动提升表达式的类型,这里得到的结果为int型(当short,byte,char 这些比int字节数小的变量类型来说,当它们和int进行运算时,运算结果会自动转换为int类型),最后当将int数据赋值给short类型的s1时,编译器会报告需要强制类型转换的错误。
而对于s1+=1;由于+=是Java语言规定的运算符,Java编译器会对它进行特殊的处理,因此可以正确编译
示例代码2:
强制类型转换:可能会损失精度
引用类型
数组(数组是一种对象)
类
接口
1.Java为每一种基本数据类型都提供了一个对应的包装类
1.1装箱:基本数据类型装换为包装类
1.2拆箱:包装类转换为基本数据类型
引申:不可变类:是指当创建了类的实例后,就不允许修改他的值了,有点类似于常量,只允许程序读取但是不可以修改。
基本类型的包装类都是不可变类
String也是不可变类。
eg:
int n = 10;
Integer i = n;//装箱
int n2 = i;//拆箱
实例代码1:
运行结果:
1.方法
2.Byte类型的数值范围是-128~127,在test函数中执行add(++a),a先自增1,此时a会越界,a的值变为-128.
基本数据类型(原生类、内置类型)8种
基本数据类型都是有符号的,而且它们的取值范围都是已经固定的。
byte
short
int
long
float
double
char
boolean
分类:
整数类型:(byte,short,int,long)
浮点类型:(float、double)
逻辑类型:(boolean)
字符类型:(char)
为什么需要装箱和拆箱
Java支持的数据类型包括两种:一种是基本数据类型,包含byte,char,short, boolean ,int , long, float,double;另一种是引用类型:如String等,其实是对象的引用,JVM中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。自动装箱就是Java**编译器**在基本数据类型和对应的对象包装类型间的转化,即int转化为Integer,自动拆箱是Integer调用其方法将其转化为int的过程
不同的数据的类型转换
隐式转换:从低精度向高精度进行转换。优先级:byte < short < char < int < long < float < double;
1.char隐式转换时会转换为与其对应的ASCLL码;
2.byte、char、short在参与运算的时候会自动转换为int型。但是使用“+=”不会产生类型转换。
3.基本类型不能和布尔型相互转换
eg:.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
对于s1 = s1 +1;由于执行s1 + 1 时会自动提升表达式的类型,这里得到的结果为int型(当short,byte,char 这些比int字节数小的变量类型来说,当它们和int进行运算时,运算结果会自动转换为int类型),最后当将int数据赋值给short类型的s1时,编译器会报告需要强制类型转换的错误。
而对于s1+=1;由于+=是Java语言规定的运算符,Java编译器会对它进行特殊的处理,因此可以正确编译
示例代码2:
package dong.test; public class Test { public static void main(String[] args){ byte a1=2,a2=4,a3,a4; //数值型变量在默认情况下为Int型, //byte和short型在计算时会自动转换为int型计算, //结果也是int 型。所以a1+a2的结果是int 型的。 a3 = a1+a2;//编译出错 a4 = (byte) (a1 + a2);//编译通过 } }
强制类型转换:可能会损失精度
引用类型
数组(数组是一种对象)
类
接口
1.Java为每一种基本数据类型都提供了一个对应的包装类
1.1装箱:基本数据类型装换为包装类
1.2拆箱:包装类转换为基本数据类型
引申:不可变类:是指当创建了类的实例后,就不允许修改他的值了,有点类似于常量,只允许程序读取但是不可以修改。
基本类型的包装类都是不可变类
String也是不可变类。
eg:
int n = 10;
Integer i = n;//装箱
int n2 = i;//拆箱
实例代码1:
package dong.test; public class Test { public void add(Byte b){ b = b++; } public void test(){ Byte a = 127; Byte b = 127; add(++a); System.out.println("a="+a); add(b); System.out.println("b="+b); } public static void main(String[] args){ Test t = new Test(); t.test(); } }
运行结果:
a=-128 b=127
1.方法
public void add(Byte b){}看似引用传递,但是在add()函数内实现++操作,会自动拆箱为byte值传递类型,所以add()函数不能实现自增功能。
2.Byte类型的数值范围是-128~127,在test函数中执行add(++a),a先自增1,此时a会越界,a的值变为-128.
相关文章推荐
- 基本数据类型 与 包装类
- java中基本数据类型和包装类的区别
- 16-1:基本数据类型对象包装类
- 面向对象-基本数据类型对象包装类与新特性
- 黑马程序员——String,StringBuffer和基本数据类型对象包装类
- 基本数据类型对象包装类
- java学习笔记(2)基本数据类型对象包装类
- day16_基本数据类型对象包装类+集合框架
- 黑马程序员_基本数据类型包装类
- 黑马程序员——java基础---String类和基本数据类型包装类
- 黑马程序员_String练习和基本数据类型包装类
- AdaultBird--我的黑马程序员之路!Chapter3---多线程同步,同步唤醒和等待,守护线程,String类,基本数据类型包装类,集合框架中的List和Set
- “黑马程序员"基本数据类型对象包装类
- 黑马程序员-JAVA基础-基本数据类型对象包装类
- java基础-String、基本数据类型对象包装类
- java基础4:String与StringBuffer及基本数据类型包装类
- 基本数据类型数据对象包装类 小结
- 基本数据类型对象包装类
- API--基本数据类型包装类
- 4.2常用对象API(基本数据类型对象 包装类)