首页 > 编程知识 正文

java基本数据类型和引用类型,java基本数据类型长度

时间:2023-05-04 07:38:38 阅读:162656 作者:3662

我总是怀疑JVA包类与值类型之间的关系。 本文以int和Integer为例探讨它们之间的关系

java值类型有intshortcharbooleanbytelongfloatdouble

其他类型都是参照型参照型和值型的不同,大家都很熟悉,所以在这里就不多说了

引用类型和值类型之间的一个重要区别在于引用类型继承了Object类的值类型

在java的许多通用容器中,类型继承Object调用的虚拟方法要求必须是引用类型,这些值类型是否明显不能满足此要求? 包装类应运而生

integershortcharbooleanbytelongfloatdouble和上述值类型对应于包类

既然包类是引用类型,他应该可以通过其他方法进行修改

公共声明更改(integera ) )。

{

*=6;

} publicstaticvoidmain (string [ ] args ) ) )。

{

integerinteger=newinteger(5;

change (整数;

system.out.println(integer;

() ) ) ) )。

但是,上述程序的输出结果5和以下代码的结果相同。 为什么?

公共语音更改(inta ) )。

{

*=6;

} publicstaticvoidmain (string [ ] args ) {int integer=5;

change (整数;

system.out.println(integer;

() ) ) ) )。

从包装类的设计来看,这一点我们已经说过了,包装类是为了弥补值类型的缺点而设计的

如果有包类,整数的表示形式会出现int和Integer两种类型。 一个是值类型,另一个是引用类型。 程序员在使用过程中会遇到麻烦

为了消除这些烦恼,java的设计将差异降至最低,并通过将包类表示为值类型来获得以上结果

这种差异的减少是由编译器完成的。 通过查看编译的字节码,您可以看到上面提到的Integer实际上是这样工作的

公共声明更改(integera ) )。

{

a=integer.valueof(a.intvalue () * 6);

} publicstaticvoidmain (string [ ] args ) ) )。

{

integerinteger=newinteger(5;

change (整数;

system.out.println(integer;

() ) ) ) )。

a=6的结果返回了新的Integer对象

因此,不能更改传递的Integer的值。 必须更改名为Integer的类的成员是final限定的还是不能更改的

而且还发现了一点Object被强制转换为int

objectobj=newinteger(5; inta=(int ) obj;

编译器处理后,实际上就是这样。 这表明引用类型和值类型完全属于两个世界

objectobj=newinteger(5; inta=(integer ) obj ).intValue );

题外话:

我非常不喜欢java的值类型和包类的设计

在java中,对象值类型全部除外

我觉得没有必要将同一整数类型分为int Interger两种类型

c#的int继承了Object,如果需要调用虚函数,它会自动装箱

int a=233;

a.ToString ()。

在jvm中奔跑的Kotlin具有特殊的映射定律,可以根据情况自动将Int转换为Int和Integer,但在语言级别上只有一个Int

Int a=233;

a.toString (;

但是到了java就只能这样了

int a=233; newinteger(a ).toString );

或者说是

int a=233;

(Integer ) a ).toString );

结束

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。