在以下示例中

int i = -128;

Integer i2 = (Integer) i; // compiles

Integer i3 = (Integer) -128; /*** Doesn't compile ***/

Integer i4 = (Integer) (int) -128; // compiles

Integer i4 = -128; // compiles

Integer i5 = (int) -128; // compiles

Integer i6 = (Integer) (-128); // compiles

Integer i7 = (Integer) 0-128; // compiles

我不能用(Integer)强制转换-128但我可以强制转换(int) -128。

我一直认为-128属于int类型并且用(int)进行转换应该是多余的。

i3行的错误是

cannot find symbol variable Integer

我尝试使用Java 6 update 29和Java 7 update 1。

编辑:您使用+128而不是-128获得相同的行为。 它确实似乎是一元运算符和二元运算符之间的混淆。

什么是你的编译器? Integer i = -128;这应该编译。

(整数)(-128)怎么样?

wierd,Integer i3 = (Integer) (-128);虽然符合要求。

@ Eng.Fouad,Peter,一元符号(+ - )有从右到左的关联性,加号,减号从左到右。 -128的效果与+128相同,前面的0应固定,即0-128或0 + 128。 (不能测试atm,但我打赌它会)

好问题!我个人希望看到一个JLS引用来解析一元/二元运算符,以及何时将一个转换视为表达式。否则,其他编译器可能不认为它是错误的!

另外,我在IDE中得到的错误是Expression expected,其中Integer是。

@peter只是一个疑问。为什么你需要在java 6和7中进行转换。我认为java 6和7中的自动装箱功能应该照顾它。我没有尝试过代码,所以我可能错了。

你知道Integer与int不一样吗?

@Raedwald,的确如此。

new Integer(-128)怎么样?

当java已经提供自动装箱和解拳的功能时,为什么我们甚至需要进行类型转换?有特殊需要吗?

@neo,在上面的例子中,它不是必需的,但在其他例子中它会产生影响,例如: -128 == -128为true但(Integer) -128 == (Integer) -128为false。一个更复杂的例子是vanillajava.blogspot.co.uk/2010/06/omg-using-triple-cast.html

不知道你是如何测试的,但我对System.out.println(-128 == - 128)是正确的;的System.out.println((整数)( - 128)== - 128);的System.out.println((整数)( - 128)==(整数)( - 128)); //System.out.println((Integer)-128==-128); //不允许或编译

我总觉得int Integer = 10很奇怪;编译。有道理但很奇怪:int Integer = 10;整数i3 =(整数)-128;的System.out.println(I3);

编译器尝试从(Integer)中减去128,而不是将-128转换为Integer。添加()以修复它

Integer i3 = (Integer) -128; // doesn't compile

Integer i3 = (Integer) (-128); // compiles

根据BoltClock在评论中对int的转换按预期工作,因为它是一个保留字,因此不能被解释为标识符,这对我来说是有意义的。

而Bringer128找到了JLS Reference 15.16。

CastExpression:

( PrimitiveType Dimsopt ) UnaryExpression

( ReferenceType ) UnaryExpressionNotPlusMinus

如您所见,转换为基本类型需要任何UnaryExpression,而转换为引用类型需要UnaryExpressionNotPlusMinus。这些是在JLS 15.15的CastExpression之前定义的。

我认为这是因为int是Java中的关键字,但Integer不是。由于int是一个关键字,因此不能将其用作变量或类的标识符,只留下它作为类型转换的唯一可能性。这就解释了。

@BoltClock在答案中纳入您的评论。

为了使这个答案更加出色,您想将我的链接添加到JLS吗?

@ Bringer128当然。

一个有趣的(对我来说)这个问题的皱纹是我们如何解决C#中的类似问题,它在"括号表达式作为操作数到二元减法运算符"和"强制运算符所在的正确操作数"之间的语法中存在歧义。演员是一个单一的减去表达"。请参阅C#规范的7.7.6节,详细了解我们用来尝试解决这些问题的启发式方法。

像这样的废话使我很高兴我们没有Java中的运算符重载......这可能会在没有时间的情况下变得更加复杂

@BillK你为什么这么说? C#规范并未在7.7.6节中引用运算符重载,因此对它们来说不是问题。

在引入自动装箱之前,这种语法定义非常精细且没有歧义。我认为这是因为Integer对象缓存引起的突然NullPoniterExceptions和不一致的相等性而不是自动装箱的严重缺陷之一。

100为+1和金徽章。 :)

谢谢@Mystical,所有其他的赞成者,以及这个答案的其他贡献者。

我找到了JLS参考。 15.16。

CastExpression:

( PrimitiveType Dimsopt ) UnaryExpression

( ReferenceType ) UnaryExpressionNotPlusMinus

如您所见,转换为基本类型需要任何UnaryExpression,而转换为引用类型需要UnaryExpressionNotPlusMinus。这些是在JLS 15.15的CastExpression之前定义的。

您需要将强制转换更改为基本类型:

... (int) -128;

或者,您可以将强制转换右侧的表达式更改为非正负一元表达式:

... (Integer) (-128);  // Either

... (Integer) 0 - 128; // Or

编译器将-解释为two-arg减号运算符,即它试图从名为Integer的其他数字中减去128,但是范围内没有这样的变量。

这编译:

您可以添加注释(int)为何有所作为。

这是由于自动装箱,不是吗?

它将其解析为Integer 128而未找到变量Integer。您需要将-128包装在括号中:

Integer i3 = (Integer) (-128);  // compiles

我已经给所有其他答案+1了,因为他们都是正确的:)

这可能与语法分析有关。请注意

工作得很好。

通常,您不应该转换为Integer类。这涉及一种称为自动装箱的东西,并且可能会在代码中引起一些细微的错误。

做你想做的首选方法是:

Integer i6 = Integer.valueOf(-128)

cast to Integer正是valueOf的合成糖。

是的,但有时合成糖会以微妙的方式失败。由于自动装箱,我有一些很难在大型应用程序中追踪空指针异常。我们将自动装箱视为错误,以便在将来避免头痛。魔术很好,但是当它失败时,头部会受伤。我发现最好是明确并且让自己避免头痛。

NPE是b1tch w / outboxing,是的。像for (int i in Collection) b / c这样的Esp案例NPE处于绝对意想不到的位置。我实际上不使用Integer w / autoboxing,因为缓存范围很小(尽管它可以增加w / XX选项)但是有一个名为IntegerProvider的类(自1.1起)来做同样的事情。使用Map(任何来自java.util)整数 - >任何东西通常都是性能命中,除非它用于琐碎的情况,几乎总是有一个更好的解决方案。

将int转换为Integer永远不会导致任何错误,除非堆溢出。但反过来却不正确。

@bestsss s/synthetic/syntactic

@MattBall,我不太明白,合成糖被广泛使用:eggcorns.lascribe.net/forum/viewtopic.php?id = 4400和合成声音对我来说更好。

问题是-编译器将其视为运算符。

第3行被解释为你试图从括号中的表达式中扣除128并且括号中的表达式不是和int类型的表达式(它将' - '视为' - '运算符)。如果将表达式更改为:

然后编译器将理解' - '是一元减号,表示负整数。

C#编译器具有相同的行为。它提供了一个更好的提示,但为什么它无法编译:

To cast a negative value, you must enclose the value in parentheses

2.0显示为整数 java_关于java:我知道为什么我需要在这里将整数文字转换为(int)?...相关推荐

  1. 整数反转leetcode java_【Java】【每日算法/刷穿 LeetCode】7. 整数反转(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]7. 整数反转(简单) 宫水三叶发布于 今天 12:10 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数 ...

  2. 整数数组查找java_使用Java编写程序以查找整数数组中的第一个非重复数字?

    查找数组中的第一个非重复数字-构造count数组以将给定数组中每个元素的计数存储为相同长度,且所有元素的初始值为0. 将数组中的每个元素与除自身之外的所有其他元素进行比较. 如果匹配发生,则增加其在计 ...

  3. 异常处理关于数组java_关于java异常处理的自我学习

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  4. Java中使用BigDecimal进行浮点数精确计算 超大整数 浮点数等计算,没有数位限制...

    (注:前面写了一个超大整数相加的类,参见: 超大整数相加,超过了long的范围,你要怎么做!,后来有朋友评论说BigDecimal可以完全实现我的这这个功能,刚开始的时候,我还不服气,据我所知那里有这 ...

  5. 实验2 java_《Java程序设计》实验2

    1.使用java语言编程,从键盘输入N个整数存储到数组中,求数组所有元素的和.最大值和平均值. import java.util.Scanner; public class Program01{ pu ...

  6. Java部分A+B正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。现给定A、DA

    题目描述: 正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的"6部分"PA是66 ...

  7. Java中使用BigDecimal进行浮点数精确计算 超大整数 浮点数等计算 没有数位限制

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! (注:前 ...

  8. android 6.0 logcat机制(一)java层写log,logd接受log

    第一篇博客,讲的主要是c++,java中打印log,然后通过socket传给logd,然后logd是如何处理接受log的. 一.logcat常用命令 logcat -c 清除已有log信息 logca ...

  9. 拉马努金的整数拆分全排列JAVA实现非递归

    拉马努金的整数拆分全排列JAVA实现非递归 点这里: 递归方式 结果是:组合成100的可能性共有:190569292种!! 不做详细说明了,需要看文字描述的,点上面链接跳转递归方式,查看详细说明 来, ...

最新文章

  1. 移动互联网漫谈(3)
  2. [Network Architecture]DPN(Dual Path Network)算法详解(转)
  3. 面对10ms的延迟,这群人就是一个字“改”
  4. 为什么谷歌要执行严格的代码编写规范?
  5. 2006无法登录mysql_错误2006(HY000):MySQL服务器消失了
  6. 开关电源适配器原理_迅为i.MX6ULL开发板原理图分析介绍
  7. 高通QFIL9008端口刷机报错问题
  8. 简单解决jsp中文乱码问题
  9. 自由空间电磁波功率衰减公式
  10. 简单几招破解Windows管理员密码
  11. 5个UI界面设计网站,马住了
  12. 关于电平转换电路1.8V转3.3V
  13. 固定连接index.php,WP中去掉固定链接中的index.php和category
  14. Markdown语法之html内嵌样式
  15. 我们的程序员为何你月薪达不到30K,奈若何?
  16. C语言学习笔记(XII)---贪吃蛇
  17. Excel 2010 VBA 入门 081 数据处理之获取不重复的数据
  18. word转pdf后书签目录失效解决方法
  19. HashMap 与 TreeMap的区别
  20. APII华人资产链:区块链技术已成为未来数字经济产业革命

热门文章

  1. 新型能力的分解与组合
  2. ro服务器物品掉率修改,给冒险者们的一封致歉信 社交服务器持续优化 仙境传说手游常见BUG解答...
  3. 蓝桥ROS机器人之现代C++学习笔记7.4 条件变量
  4. How to Read a Visualization Research Paper: Extracting the Essentials
  5. Error while extracting response for type [] and content type [],json返回值被解析为xml
  6. SDHC或SD2.0卡的驱动程序的注意事项
  7. 婚姻家庭法重点复习提纲
  8. cad抛物线曲线lisp_CAD如何画抛物线啊?
  9. 阿里云的专业技术认证分为哪些?为啥要获得阿里云的ACP认证!
  10. 生产环境和开发环境_环境部署:开发、测试和线上环境的区别