【问题标题】:Use of type cast operator within print statement在 print 语句中使用类型转换运算符
【发布时间】:2017-09-11 05:36:43
【问题描述】:

我很难理解为什么以下代码会在 Java 中返回语法错误:

int integer1 = 5;
System.out.print("The value of integer1 is " + (String)integer1);

我注意到要绕过这个错误,我可以创建一个新的 String 变量,初始化为 integer1 的类型转换值:

int integer1 = 5;
String cast = (String)integer1;
System.out.print("The value of integer1 is " + cast);

但这似乎有点不必要,特别是如果我只显示整数的值一次。

【问题讨论】:

  • 您不能在字符串和整数之间进行转换。显示的两个示例都无法编译。为什么不简单地使用 wrapper 类型在 string 和 int 之间进行转换?
  • @Jérôme 暗中做了什么? “int”和“string”之间没有隐式转换。
  • 你说第二部sn-p作品?
  • @OusmaneMahyDiaw 他们可能意味着在字符串连接中,如果可能,任何内容都将转换为字符串。这不是强制转换,而是隐式完成的转换。
  • 当您询问错误时,您应该在问题中粘贴确切的错误消息。

标签: java casting typecast-operator


【解决方案1】:

您只能将一个基元转换为另一个基元,或将一个对象转换为它的实例类型。例如,您可以将 String 转换为 Object,将 int 转换为 long。如果您想在字符串中使用 int,请使用 String.format 或连接将自动处理转换:

System.out.print(String.format("The value of integer1 is %d", integer1));

System.out.print("The value of integer1 is " + integer1);

顺便说一句,Java 中关于原语和强制转换的重要一点是,您不能将装箱的原语强制转换为其他装箱的类型。例如,如果您有

Integer foo = 1000;
Long bar = foo;

你会得到一个 ClassCastException,但是

int foo = 1000;
long bar = foo;

会正常工作

对盒装版做同样的事情:

Integer foo = 1000;
Long bar = foo.longValue();

【讨论】:

    【解决方案2】:

    我很难理解为什么以下返回 Java 中的语法错误:

    int integer1 = 5;
    String cast = (String)integer1;
    System.out.print("The value of integer1 is " + cast);
    

    您不能从string 转换为int,反之亦然,这两种类型之间没有任何关系。事实上,您展示的所有示例都无法编译。

    如果你想在这两种类型之间进行转换,你可以使用这些例子:

    字符串转整数:

    int value = Integer.valueOf("12345");
    

    int value = Integer.parseInt("12345");
    

    整数转字符串:

    String value = String.valueOf(12345);
    

    String value = Integer.toString(12345);
    

    【讨论】:

    • 或者String value = Integer.toString(12345);
    • @Code-Apprentice 当然我也应该建议。
    • 这在编程语言中是不是很常见,因为类型的类型会有所不同?
    • @BrandonSweeting 所有编程语言都有管理如何从一种类型转换为另一种类型的规则。无论您使用哪种语言,理解这些规则都很重要,因为它因语言而异。
    【解决方案3】:

    在你的第二个例子中,你可以这样做:

    int integer1 = 5;
    System.out.print("The value of integer1 is " + integer1);
    

    当您使用+ 运算符将String 与其他任何内容连接时,Java 会自动为“其他任何内容”调用适当的toString() 方法。 这与类型转换不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      相关资源
      最近更新 更多