Does int.class equal Integer.class or Integer.TYPE in Java?

前端 未结 2 1162
盖世英雄少女心
盖世英雄少女心 2020-12-05 07:10

Let\'s imagine one retrieves the declaring type of a Field using reflection.

Which of the following tests will correctly indicate whether one is dealing

相关标签:
2条回答
  • 2020-12-05 08:05

    int.class compiles down to Integer.TYPE. However, I think you are using Field.getDeclaringClass() incorrectly, as this returns the Class object representing the class that declares the field. What you would want to use is Field.getType().

    0 讨论(0)
  • 2020-12-05 08:06

    Based on Field.getType() (instead of f.getDeclaringClass()), I get the following:

    Type: java.lang.Integer
    
    equals(Integer.class): true
    equals(int.class)    : false
    equals(Integer.TYPE) : false
    == (Integer.class)   : true
    == (int.class)       : false
    == (Integer.TYPE)    : false
    
    Type: int
    
    equals(Integer.class): false
    equals(int.class)    : true
    equals(Integer.TYPE) : true
    == (Integer.class)   : false
    == (int.class)       : true
    == (Integer.TYPE)    : true
    
    Type: java.lang.Object
    
    equals(Integer.class): false
    equals(int.class)    : false
    equals(Integer.TYPE) : false
    == (Integer.class)   : false
    == (int.class)       : false
    == (Integer.TYPE)    : false
    

    Meaning the following is true:

    Integer.TYPE.equals(int.class)
    Integer.TYPE == int.class
    

    Meaning if I want to find out whether I am dealing with an int or an Integer, I can use any of the following tests:

    isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE);
    isInteger = c.equals(Integer.class) || c.equals(int.class);
    isInteger = (c == Integer.class) || (c == Integer.TYPE);
    isInteger = (c == Integer.class) || (c == int.class );
    

    Is there a corner case I am missing? If yes, please comment.

    0 讨论(0)
提交回复
热议问题