int squareRoot = Math.sqrt(i);
一般来说,“可能的有损转换”错误消息是什么意思,您如何修复它?
首先,这是一个编译错误。如果您在运行时在异常消息中看到它,那是因为您运行了一个编译错误1的程序。
消息的一般形式如下:
“不兼容的类型:从
到
的转换可能有损”
int squareRoot = Math.sqrt(i);
让我们来看几个例子。
>
将long
转换为int
可能是有损的转换,因为有些long
值没有相应的int
值。例如,任何long
大于2^31-1的值都太大,不能表示为int
。同样,任何小于-2^31的数字都太小。
将int
转换为long
不是有损转换,因为每个int
值都有相应的long
值。
这些都是有潜在损失的转换:
短
到字节
或字符
char
到byte
或short
int
到字节
、短
或字符
长
到字节
、短
、字符
或int
浮动
到字节
、短
、字符
、int
或长
双
到字节
、短
、字符
、int
、长
或浮点
.消除编译错误的方法是添加一个typecast。例如;
int i = 47;
int squareRoot = Math.sqrt(i); // compilation error!
int i = 47;
int squareRoot = (int) Math.sqrt(i); // no compilation error
那这个呢?
byte b = (int) 512;
这将导致b
获得值0
。从较大的int类型转换为较小的int类型是通过屏蔽高阶位来完成的,512
的低阶8位都为零。
简而言之,您不应该简单地添加一个类型转换,因为它可能不会为您的应用程序做正确的事情。
for (double d = 0; d < 10.0; d += 1.0) {
System.out.println(array[d]); // <<-- possible lossy conversion
}
解决方案是重写代码以避免使用浮点值作为数组索引。(添加类型强制转换可能是不正确的解决方案。)
第二个例子:
for (long l = 0; l < 10; l++) {
System.out.println(array[l]); // <<-- possible lossy conversion
}
这是前一个问题的变体,解决方案是一样的。不同之处在于根本原因是Java数组被限制为32位索引。如果您想要一个包含超过231-1个元素的“像数组一样”的数据结构,您需要定义或找到一个类来完成它。
public class User {
String name;
short age;
int height;
public User(String name, short age, int height) {
this.name = name;
this.age = age;
this.height = height;
}
public static void main(String[] args) {
User user1 = new User("Dan", 20, 190);
}
}
$ javac -Xdiags:verbose User.java
User.java:20: error: constructor User in class User cannot be applied to given types;
User user1 = new User("Dan", 20, 190);
^
required: String,short,int
found: String,int,int
reason: argument mismatch; possible lossy conversion from int to short
1 error
int a = 21;
byte b1 = a; // <<-- possible lossy conversion
byte b2 = 21; // OK
怎么回事?为什么一个版本被允许,而另一个不允许?(毕竟他们“做”同样的事情!)
首先,JLS声明21
是一个数值文本,其类型为int
。(没有字节
或短
文本。)因此,在这两种情况下,我们都将int
赋值给byte
。
在第一种情况下,错误的原因是并非所有int
值都适合一个byte
。
byte
、short
、char
或int
。请注意,这只适用于赋值语句,或者更严格地说,适用于赋值上下文。因此:
Byte b4 = new Byte(21); // incorrect
给出编译错误。
一般来说,“可能的有损转换”错误消息意味着什么,您如何修复它?
问题内容: 突然之间,我的应用程序出现了前所未有的问题。我决定检查Apache的错误日志,并发现一条错误消息,指出“ zend_mm_heap已损坏”。这是什么意思。 操作系统:Fedora Core 8 Apache:2.2.9 PHP:5.2.6 问题答案: 经过多次试验和错误,我发现如果我增加php.ini文件中的值,此错误就消失了
我有这个程序,它几乎是一个计算器,但有一个移动的JLabel,每次你点击标签时都应该改变颜色,但我在代码的最底部有3个错误,我已经用注释标记了。所有三个都是:错误:不兼容类型:可能从长整型转换为整数
我希望输入一个和另一个ex: 1和1000000000,现在我希望创建一个大小为1000000000的数组。然后在数组的每个索引处,存储int val,ex:。 当我尝试执行此操作时,Netbeans 会向我显示此行中的错误: “可能从long到int的有损转换”。这是我的密码:-
我为学校编写了一个java程序,它编译正确,但当我试图运行它时,我得到了以下信息: 线程“main”java中出现异常。lang.NoClassDefFoundError:javafx/embed/swing/JFXPanel位于Main。main(main.java:5)由:java引起。lang.ClassNotFoundException:javafx。嵌入摆动java的JFXPanel。b