为什么要将String转换为String?

时间:2015-12-07 11:24:42

标签: java string

有关Oracle Java社区网站的文章作为示例(对于JPA转换器,但我认为这不相关)以下方法:

public Boolean convertToEntityAttribute(String y) {
    String val = (String) y;
    if(val.equals("Y")){
        return true;
    } else {
        return false;
    }
}

将String y转换为String val有什么用?是否有正当理由这样做?

原创文章:What's New in JPA

3 个答案:

答案 0 :(得分:13)

这种演员完全没必要。我可以想象它是在

之前
public Boolean convertToEntityAttribute(Object y) {
    String val = (String) y;
    ...
}

但后来参数类型更改为String,作者只是忘记删除演员。

答案 1 :(得分:3)

  

是否有正当理由这样做?

无论 1

但另一方面,Java编译器知道类型转换是不必要的,并将其优化掉。所以唯一的#34;损害"是可读性。

例如。

[stephen@blackbox tmp]$ cat Test.java 
public class Test {
    public void test (String x) {
        String s = (String) x;
        System.out.println(s);
    }
}
[stephen@blackbox tmp]$ javac Test.java 
[stephen@blackbox tmp]$ javap -c Test
Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public void test(java.lang.String);
    Code:
       0: aload_1
       1: astore_2
       2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       5: aload_2
       6: invokevirtual #3                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       9: return
}
[stephen@blackbox tmp]$ 

语句String s = (String) x;被编译为简单的加载和存储;没有checkcast指令。

如果JIT编译器能够优化掉多余的checkcast ......如果它看到一个,我不会感到惊讶。

1 - ...手写代码。在生成的源代码中,冗余的类型转换可以用于使编写源代码生成器更容易。毕竟,生成代码的可读性在很大程度上是无关紧要的。

答案 2 :(得分:2)

这种多余的铸造是没用的。

当前代码可以简化为

public Boolean convertToEntityAttribute(String y) {
    return "Y".equals(y);
}