2011-12-28 58 views
-1

考虑:数据值和类型

int x = 10; 
double d = -3.0; 
boolean f = false; 

为什么下面仍然是一个双重它被强制转换为int后...对于第二个也是,为什么它输出float时定义为长?:

(int) d/2.0 
(long) d * 2f 

2.

为什么下面的第一个打印一个字符串(?),而后者是一个数字?

"2" + x + 2 
"3" + 3 * x 

但后来有一个与下面的错误:

"5" + i + 2 

此外,在follwing,什么是真正发生的事情,结果是什么?

d++ + d 

4.

当Math.round时,为什么不把它转换以下双成浮动,或者是他们同样的事情?

Math.round(x/d) 
+0

什么是'i'?... – 2011-12-28 16:05:02

+0

这些都是很多不相关的问题,不使它成为一个伟大适合SO ... – 2011-12-28 16:05:31

+0

第一个和第二个是运算符优先级(http://introcs.cs.princeton.edu/java/11precedence/),第三个是缺少的上下文(什么是“我”?)和最后一个: 去尝试一下。 – 2011-12-28 16:06:06

回答

1

为什么在将它作为int类型转换后仍然是double类型?对于第二个类型,为什么在定义长类型时会输出一个float类型?:

(int) d/2.0 
(long) d * 2f 

由于投(int)操作的优先级高于/*运营商。 你应该这样阅读:

((int) d)/2.0 

((long) d) * 2f 

为什么第一以下打印字符串,而后者的数字(?)?

"2" + x + 2 
"3" + 3 * x 

我认为这是两个casesm字符串必须 “阅读” 这一表述是这样的:

("2" + x) + 2 
"3" + (3 * x) 

但后来有一个与下面的错误:

"5" + i + 2 

什么是错误?

此外,随着实际情况的发生和结果如何?

d++ + d 

这是一系列的操作:

  1. TMP = d
  2. d = d + 1
  3. 返回TMP + d

当数学.round被使用,为什么它将下面的double转换为af憎恶,还是他们是同一件事?

Math.round(x/d) 

将其转换为long,因为Math.round(double)返回类型为long

1
(int) d/2.0 
(long) d * 2f 

你还是浮点运算,即一个操作数仍然是一个双/浮动,因此,结果是双/浮动。

"2" + x + 2 
"3" + 3 * x 

第一也只是级联,即表达式的类型是String因此,所有的操作数被转换成一个字符串。对于x=1,你会得到"212"

第二个是受操作者precendence,即*+之前被评估,因此表达3 * x是整数数学运算,其结果然后将通过"3" + result被转换成一个字符串。

"5" + i + 2 

错误在于你的代码,发布异常。最有可能的是i是未定义的。

d++ + d 

查看运算符优先级和后增量运算符。 x++将返回x的值,然后增加它。然后将以前的值x添加到新值中。你可以认为它与x + (x+1)相似。

当使用Math.round时,为什么它会将下面的double转换为float,还是它们是同一个东西?数学。

数学。round(x/d)

没有转换,只是一个重载的方法(一个取一个double,一个取一个float)。基本上floatdouble的精度要低,但都是浮点数。

2

此:

(int) d/2.0 

是一样的:

((int) d)/2.0 

也许你的意思呢?

(int)(d/2.0) 

2.

他们都 “打印” 的字符串(假设你在谈论使用它们作为参数传递给System.out.println)。

这些:

"2" + x + 2 
"3" + 3 * x 

是相同的,因为这些:

("2" + x) + 2 
"3" + (3 * x) 

可以相同,因为这些(假设x = 10):

("2" + 10) + 2 
"3" + 30 

它们是相同的,因为这些:

"2102" 
"330" 

我不记得是什么应该发生在这里。但是你永远不需要/不想编写这样的代码,所以没关系!

4.

Math.round返回类型是整数类型,而不是一个浮点型。

0

其中一个问题太多。

  • 您正在转换操作数,而不是表达式,并且类型将被提升。
  • 他们实际打印什么,以及如何区分他们的类型?退房Java operator precedence
  • 因为没有i
  • 您可以打印结果。

Conversions and Promotions JLS section也可能有帮助;你的许多问题都在那里回答。