Java的封装类型和原始类型的区别:1、传递方式不同;2、封装类可以有方法和属性;3、默认值不同;4、存储位置。封装类是引用类型。原始数据类型在传递参数时都是按值传递,而封装类型是按引用传递的(其实“引用也是按值传递的”,传递的是对象的地址)。
1、传递方式不同
封装类是引用类型。基本类型(原始数据类型)在传递参数时都是按值传递,而封装类型是按引用传递的(其实“引用也是按值传递的”,传递的是对象的地址)。由于包装类型都是不可变量,因此没有提供改变它值的方法,增加了对“按引用传递”的理解难度。
int是基本类型,直接存放数值;Integer是类,产生对象时用一个引用指向这个对象。
2、封装类可以有方法和属性
封装类可以有方法和属性,利用这些方法和属性来处理数据,如Integer.parseInt(Strings)。基本数据类型都是final修饰的,不能继承扩展新的类、新的方法。
3、默认值不同
基本类型跟封装类型的默认值是不一样的。如int i,i的预设为0;Integer j,j的预设为null,因为封装类产生的是对象,对象默认值为null。
4、存储位置
基本类型在内存中是存储在栈中,引用类型的引用(值的地址)存储在栈中,而实际的对象(值)是存在堆中。
虽然基本类型在栈上分配内存效率高,但是在堆栈上分配内存可能有内存泄漏的问题。
延伸阅读:
什么是原始类型?
在计算机科学中,原始类型(英语:Primitive type)有别于复合类型,是由编程语言提供的数据类型,作为创建基础。根据语言及其实现,在电脑的存储器中,原始类型可能没有与对象一对一的对应。
原始类型的实际范围,取决于所使用的特定编程语言。例如,在C语言中,字符串是一个复合类型,不过在后来的Basic中,字符串是原始类型。
通常预期以基于原始类型的运算,构成较快速的语言。整数加法,例如,可以运行单一的机器指令,且部分处理器提供特定的指令,以单一指令处理一系列的字符。尤其是,C语言标准中提到,“一个‘简单’的int对象,具有原始的大小,其大小以运行环境的架构所暗示。”意即在32位架构下的int,可能就是32位的长度。
大部分语言不允许以程序修改原始类型的行为或性能。例外的有Smalltalk,其允许在程序内部扩展原始类型。可以在其上运行加入的运算,甚至重新定义内置的运算。
文章标题:Java的封装类型和原始类型的区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37906