首页 / 知识
Java自动装箱为什么不扩展到自动装箱类型的方法的方法调用?
2023-04-11 19:08:00

Why doesn't Java autoboxing extend to method invocations of methods of the autoboxed types?我想将原语转换为字符串,然后尝试:
此操作失败,并显示以下错误:
现在,我知道原语不是引用类型(即,不是对象),因此不能有方法。但是,Java 5引入了自动装箱和拆箱功能(一种C#...我在C#中从未喜欢过,但这不重要)。因此,通过自动装箱,我希望上面的将myInt转换为Integer,然后在其上调用toString()。 此外,我相信C#允许这样的调用,除非我记错了。这仅仅是Java的自动装箱/拆箱规范的不幸缺点,还是有充分的理由呢? Java自动装箱/拆箱的程度无法允许您取消引用原语,因此编译器会禁止它。您的编译器仍然知道 自动装箱主要在分配或参数传递期间有用-允许您将图元作为对象传递(反之亦然),或将图元分配给对象(反之亦然)。 不幸的是,您必须这样做:(对Patrick表示敬意,我切换到了您的方式)
贾斯汀所说的同上,但你应该这样做:
它保存一两个分配,并且可读性更好。 另一种方法是使用:
对于每种原始类型和 请参阅http://java.sun.com/javase/6/docs/api/java/lang/String.html。
缺点更多,这是一个微妙的话题。检查一下:
这里会打印" long"(我自己没有检查过),因为编译器选择加宽而不是自动装箱。使用自动装箱时请务必小心,否则请不要使用它! 最接近您的示例的有效语法是
编译器完成后,等同于
但是,它的表现不如常规用法 编辑:如果下降投票者会对此无用的原因发表评论,我将不胜感激。 如果Java定义了某些对原始类型进行操作的静态方法,并在编译器中内置了一些语法糖,那么这将很有帮助,这样
将等同于
我认为这样的功能不会导致与根据当前规则编译的任何代码不兼容,并且在许多情况下都不会减少语法混乱。如果Java要对被取消引用的原语进行自动装箱,人们可能会认为它会将取消引用的语法映射到静态方法调用(这实际上是.NET中发生的事情),因此以这种形式编写的操作不会比原来花费更多的钱。等效的静态方法调用。添加新的语言功能会鼓励人们编写错误的代码(例如,自动装箱后解引用的原语)似乎不是一个好主意,尽管允许使用解引用样式的方法可能是。 正如每个人都指出的那样,自动装箱可以使您简化一些代码,但是您不能假装原语是复杂的类型。 也很有趣:Java中的"自动装箱是编译器级的技巧"。自动装箱基本上是添加到Java上的一个奇怪的麻烦。查看这篇文章,了解有关它有多奇怪的更多信息。 在C#中,整数既不是引用类型,也不必将其装箱才能调用ToString()。但是,它们在框架中被视为对象(作为ValueType,因此它们具有值语义)。在CLR中,通过"间接"将它们加载到堆栈(ldind)上来调用基元上的方法。 |
最新内容
相关内容
python如何比较两个字符串是否相等
python如何比较两个字符串是否相等,培训,工作,字符串,两个,下面,以上,方法,更多,内容,python在实际的开发工作中,经常会遇到要判定两个字符串python怎么调用类方法
python怎么调用类方法,培训,方法,实例,静态,定义,参数,属性,对象,关键字,以上,python中的类用来描述具有相同的属性和方法的对象的集合。它定python错误类型有哪些
python错误类型有哪些,异常,系统,培训,错误,代码,标准,检测,类型,程序,逻辑,python的错误有语法错误和逻辑错误语法错误程序执行过程中,pythonpython判断元素是否是字符串类型
python判断元素是否是字符串类型,培训,异常,类型,实例,字符串,数据类型,对象,元素,参数,序列,isinstance()是Python中的一个内建函数语法:isinpython判断字符串是否包含中文
python判断字符串是否包含中文,培训,检测,代码,字符串,中文,字符,范围,空格,原理,以上,原理:中文字符的编码范围是:\u4e00-\u9fff只要编码在pythonpython是什么类型的语言
pythonpython是什么类型的语言,培训,系统,教育,软件,电脑,代码,简介,人工智能,类型,语言,python是一种面向对象、解释型、动态类型计算机程序python判断字符串是否为小数的方法
python判断字符串是否为小数的方法,培训,代码,合法,小数点,小数,整数,字符串,方法,右边,左边,python想判断一个字符串是不是一个合法的小数,但python可以继承父类方法吗
python可以继承父类方法吗,培训,代码,名字,方法,动物,属性,编译器,这样的话,定义,里面,python继承,调用父类属性方法在python里面,继承一个类python如何进行类型转换的
python如何进行类型转换的,培训,数字,类型,字符串,整数,函数,对象,和数,变量,字符,python提供了将变量或值从一种类型转换成另一种类型的内置python需要声明类型吗
python需要声明类型吗,数据,培训,代码,中心,类型,声明,语言,变量,内存空间,内存,python不用去声明变量的类型,是由于其“若类型”的语言特性决python函数的高级使用方法
python函数的高级使用方法,代码,函数,灵活,数据,培训,时间,定义,程序,赋值,变量,Python的函数是“一等公民”,因此函数本身也是一个对象,函数既python字符串是对象吗
python字符串是对象吗,培训,名称,设计,对象,函数,变量,实体,参数,物件,字符串,python中一切都是对象在python中下列语句其实都是一个共同点:i=