3 回答
TA贡献1848条经验 获得超10个赞
冲突类型
隐式转换String
为不冲突。的JLS,5.1.11节,定义了非冲突的方式这种转换。
基本上,任何原始类型转换为包装对象类型,然后toString()
在引用类型上调用。此方法定义在Object
并因此保证存在于所有引用类型上。
虽然这种转换是“自动的”,但它不是在冲突类型之间进行的,因为有一个易于理解、有意义的规则描述了总是会成功的转换(除非从原始值创建一个对象生成一个OutOfMemoryError
)。
这与称为缩小原始转换的冲突转换形成对比,例如int
to byte
。这可能会丢失信息,因此不会隐式发生。它是只有显式转换的合法代码,例如byte b = (byte) myInt
.
TA贡献1835条经验 获得超7个赞
要去的地方始终是 Java 语言规范。在这种情况下,我们谈论的是15.18.1,字符串连接运算符 +:
如果只有一个操作数表达式的类型为
String
,则在运行时对另一个操作数执行字符串转换(第 5.1.11 节)以生成字符串。
特别是,+
根据上下文,符号可以表示三种不同的含义:一元加号、字符串连接或加法。
TA贡献1802条经验 获得超5个赞
在 java 中,会发生从一种数据类型到另一种数据类型的自动类型转换或扩展,因为这两种数据类型是兼容的,并且目标类型大于源类型。因此,当 Java 编译器自动将数据从一种类型转换为另一种类型时,根本不会丢失任何信息,因为目标类型的内存始终大于源类型。但是,在类型不兼容的情况下,java 编译器会检查类型兼容性,如果两者类型不兼容,因为不会发生自动类型转换。如果这样做,它将自动导致信息丢失。因此,java 阻止了不兼容或冲突的数据类型之间的自动类型。为了在不兼容的类型之间转换数据,java 具有缩小转换。在缩小转换范围内,这两种数据类型可能兼容也可能不兼容,目标可能大于也可能不大于源。在缩小范围中,用户明确缩小数据范围,使其适合目标类型。缩小可能会导致信息丢失,例如将双精度型转换为整数类型时,小数点后的所有信息都会丢失。java中的例子:
import java.util.*;
class byteb
{
public static void main(String args [])
{
double a=30.45;
int b;
//b=a;
b=(int)a;
System.out.println("b="+a +"and"+ "a="+b);
}
}
Run code snippetHide resultsExpand snippet
添加回答
举报