为了账号安全,请及时绑定邮箱和手机立即绑定

关于java中自动强制的问题?

关于java中自动强制的问题?

喵喔喔 2021-09-26 18:12:35
许多人推荐我阅读“Java - 完整参考”一书。我开始阅读它,我发现了这段文字:“在某些语言中,没有冲突类型的自动强制或转换。Java 编译器检查所有表达式和参数以确保类型兼容。任何类型不匹配都是必须在执行之前纠正的错误”这是否与以下内容相矛盾: System.out.println("string"+ a);哪里a是任何原始类型。这不是一种自动强制的隐式类型转换。例如,字符串和整数不是兼容的类型。注意:我不是母语为英语的人
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

冲突类型

隐式转换String为不冲突。的JLS,5.1.11节,定义了非冲突的方式这种转换。

基本上,任何原始类型转换为包装对象类型,然后toString()在引用类型上调用。此方法定义在Object并因此保证存在于所有引用类型上。

虽然这种转换是“自动的”,但它不是在冲突类型之间进行的,因为有一个易于理解、有意义的规则描述了总是会成功的转换(除非从原始值创建一个对象生成一个OutOfMemoryError)。

这与称为缩小原始转换的冲突转换形成对比,例如intto byte。这可能会丢失信息,因此不会隐式发生。它是只有显式转换的合法代码,例如byte b = (byte) myInt.


查看完整回答
反对 回复 2021-09-26
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

要去的地方始终是 Java 语言规范。在这种情况下,我们谈论的是15.18.1,字符串连接运算符 +

如果只有一个操作数表达式的类型为String,则在运行时对另一个操作数执行字符串转换(第 5.1.11 节)以生成字符串。

特别是,+根据上下文,符号可以表示三种不同的含义:一元加号、字符串连接或加法。


查看完整回答
反对 回复 2021-09-26
?
慕后森

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


查看完整回答
反对 回复 2021-09-26
  • 3 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信