学生需要快速的java澄清
我正在查看一段代码,如下所示:学生需要快速的java澄清,java,Java,我正在查看一段代码,如下所示: float x = 9; float y = 5; int z = (int)(x / y); 问题: 我想知道为什么第3行有第二个int,而它已经声明z是int。提前谢谢 除法x/y的结果是一个float。Java不允许像这样通过缩小原语转换(这里是到int)为int变量赋值,因为这样可能会失去精度。但是Java将允许您通过显式转换来实现这一点,Java假定您知道自己在做什么。您必须将结果(x/y)声明为int,否则您将尝试使用float设置int变量的值,
float x = 9;
float y = 5;
int z = (int)(x / y);
问题:
我想知道为什么第3行有第二个int,而它已经声明z是int。提前谢谢 除法
x/y
的结果是一个float
。Java不允许像这样通过缩小原语转换(这里是到int
)为int
变量赋值,因为这样可能会失去精度。但是Java将允许您通过显式转换来实现这一点,Java假定您知道自己在做什么。您必须将结果(x/y)
声明为int
,否则您将尝试使用float
设置int
变量的值,这将生成编译器错误。当减少一个数字的精度或范围时,需要这种有目的的声明。根据编译器,我们是kiddo的。。因此,他(编译器)希望我们明确地提到,我们所做的是故意的,而不是错误的,因此我们需要明确地指定
以下是两种情况:
1) 带(int):
2) 不带(int):
否则,编译器会说“嘿!你在做什么,你在给int赋值一个浮点。”为什么不删除它,看看自己会发生什么?这是否会产生编译器警告或错误可能会因不同的项目和编译器设置而异。这是一个错误,而不是警告。代码将无法编译。是的,我做了更改…谢谢。。。顺便说一句,并不是每个编译器都会给出错误,有些编译器只是给出一个警告,然后继续。。
**Program:**
class fox
{
public static void main(String args[])
{
float x = 9;
float y = 5;
int z = (int)(x / y);
System.out.print(z);
}
}
**Output:**
# 1: hide clone input 8 seconds ago
result: success time: 0.07s memory: 380224 kB returned value: 0
input: no
output:
1
**Program:**
class fox
{
public static void main(String args[])
{
float x = 9;
float y = 5;
int z = (x / y);
System.out.print(z);
}
}
**Output:**
Main.java:7: error: possible loss of precision
int z = (x / y);
^
required: int
found: float
1 error
# 1: hide clone 6 seconds ago
result: compilation error
// see the compiler cannot understand that we wish to do it purposefully,,