`

Java基本类型、包装类以及自定义类判断

    博客分类:
  • Java
 
阅读更多

一、基本类型与包装类判断

public class Test{  
 public static void main(String[] args) throws Exception {  
  System.out.println((char)65);  
        System.out.println(isWrapClass(Long.class));  
        System.out.println(isWrapClass(Integer.class));  
        System.out.println(isWrapClass(String.class));   
        System.out.println(isWrapClass(Test.class));  
    }   
  
    public static boolean isWrapClass(Class clz) {   
        try {   
           return ((Class) clz.getField("TYPE").get(null)).isPrimitive();  
        } catch (Exception e) {   
            return false;   
        }   
    }   
}   

 

Java的所有类总称Class

基本类型:

Java的基本类型有八种:int, double, float, long, short, boolean, byte, char, void.

基本类型属于Class的一个子集。

因此:

.isPrimitive()是用来判断是否是基本类型的:void.isPrimitive() //true;

.class用来返回该类的Class对象的实例:int.class == intclass //基本类型

                                     int.class.isPrimitive //true

                                     Integer.class == Integer //包装类

                                     Integer.class.isPrimitive //false

.TYPE是返回基本类型的Class实例,所以:int.class == Integer.TYPE //true;

除了int Integer,类似的有 float Float; double Double; string String等。

基本类存储在栈中,包装类村住在堆中,栈是LIFO(后进先出),基本类的存取速度更快。

JAVA 虚机自动完成基本类与包装类的转换

基本类型的包装类都采用final修饰方法,因此无法继承它们扩展的新类,也无法重写它们的方法。

包装类:

包装类是基本类的扩展

int i=2, Integer i = new Integer(2); 其实这个过程是由自动转换的,定义了int i=2就不用关心将其转换为包装类的过程。这就是为什么基本类型不需要new,例如 int i = new int() i =2;是多余的。

此外,HashMap ArrayList等不能将基本类加入其中,而只能加入包装类。一个典型的实例:

Map<int, Object> testMap = new HashMap<int, Object>();就是错误的

而应该把int换成Integer。

 

最后,如何判断一个对象所属的类型:

常见的一个典型错误是 object.getClass.isPrimitive()

许多人指望靠此判断object是不是一个数字或者布尔。其实这样返回的是该对象的类型,如java.lang.double,而非类型的基本类型,因此是错误的。

 

正确的步骤是:

 

object instanceof String

Number

Boolean

Character

null

搞懂java的基本类型就不在会为判断对象而发愁。

 

二、如何判断一个类型是Java本身的类型,还是用户自定义的类型

public class BugMeNot {  
  public static boolean isJavaClass(Class<?> clz) {  
    return clz != null && clz.getClassLoader() == null;  
  }  
    
  public static void main(String... args) {  
    System.out.println(isJavaClass(Integer.class)); // true  
    System.out.println(isJavaClass(BugMeNot.class)); // false  
  }  
} 

 

 

 

 

分享到:
评论

相关推荐

    Java工具类之Apache的Commons Lang和BeanUtils

    Apache Commons Lang是一个专门用于处理Java语言级别的特性的库,它提供了大量的静态方法来增强Java的基本类型、字符串、数组、日期时间等操作。以下是一些Lang库的关键知识点: 1. **字符串处理**:Lang库中的`...

    Java基础知识-day01【Object类、常用API】.pdf

    - **基本类型包装类**:Java为每个基本类型提供了对应的包装类,如Integer、Double、Boolean等。这些类提供了额外的特性,如比较、格式化输出等。 - **自动装箱/拆箱**:Java 5引入了这一特性,允许在基本类型和...

    Java开发技术大全(500个源代码).

    leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发...

    java面试题大全.pdf

    8. 基本数据类型与包装类:在Java中,除了八种基本数据类型,还存在与之对应的包装类,如Integer、Double等。它们是不可变的,并且提供了各种有用的方法来处理对应的基本数据类型。 9. 集合框架:Java集合框架包括...

    java笔记 java笔记

    - **自动装箱/拆箱**:允许自动在基本类型和对应的包装类之间进行转换。 - **静态导入**:可以静态导入类中的静态成员,简化代码。 - **可变参数**:方法可以接受任意数量的同类型参数。 以上是Java的基础知识和...

    Java 面试中有关数据类型常见的 50 个面试题.pdf

    - **自动装箱**:在 Java 5.0 中引入,简化了从基本数据类型到包装类的转换过程。 - **自动拆箱**:与自动装箱相反的过程,即从包装类对象自动转换为基本数据类型。 ### 六、String 类型 #### 12. String 类型 - `...

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。...第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    Java基础入门教程 含习题 第06章 Java API(共43页).pptx

    Java的八个基本数据类型(byte、short、int、long、float、double、char、boolean)各自有对应的包装类,如Integer、Long、Float等。包装类除了能将基本类型和对象之间进行转换外,还提供了其他功能,如比较、格式化...

    java全集.pdf JAVA全集

    - **protected**:在当前类及其子类以及同一包中的其他类中可见。 - 默认:在同一个包内的其他类可见。 **6.7 构造方法** - 用于初始化对象。 - 方法名与类名相同。 - 没有返回类型。 **6.8 数据和方法的隐藏——...

    50道Java基础编程题

    20. **包装类**:了解Integer,Double等包装类的作用,以及它们与原始数据类型之间的自动装箱拆箱。 通过解答这50道Java基础编程题,初学者将能够系统地学习和实践这些关键概念,为今后深入学习Java打下坚实基础。...

    Java基础知识索引

    #### Java包装类 Java提供了对应于每种基本数据类型的包装类,例如:`Integer`、`Float`、`Character`等。 #### 内部类 内部类可以在外部类的方法内部定义,也可以在外部类的类体内定义。匿名内部类是内部类的一...

    标识符----关键字---数据类型.rar

    此外,Java中的自动装箱和拆箱机制使得基本类型和其对应的包装类之间转换更加便捷。 总的来说,理解标识符、关键字和数据类型是学习Java或其他任何编程语言的第一步。它们构成了程序的基本构造块,影响着代码的...

    Think in java 教程

    - 封装类:学习对应的包装类,如Integer、Double等,以及它们提供的额外功能,如自动装箱和拆箱。 3. 控制结构 - 条件语句:掌握if-else、switch-case等控制结构,进行条件判断。 - 循环:理解for、while、do-...

    电大Java语言与WWW技术形成性考核判断题.docx

    包装类如Integer将基本类型转换为对象。Date类处理日期和时间,Calendar是抽象类,不可直接实例化。DateFormat类用于日期格式化,SimpleDateFormat是具体实现。Java语言具有高级特性,如简单性、安全性和面向对象。...

    广药java考试题目

    Java提供了包装类将基本数据类型封装成对象,方便进行更多的操作。 **示例题目的选项解析:** - `Integer.parseInt()`将字符串转换为`int`类型。 - `Integer.valueOf()`创建一个`Integer`对象。 因此,正确答案是D...

    java计算机学习,廖雪峰教程,如果侵权,联系我删除;廖雪峰教程.pdf

    4. Java核心类:讨论了字符串和编码(StringBuilder、StringJoiner)、包装类型(如BigInteger、BigDecimal)、JavaBean、枚举类以及常用工具类。 5. 异常处理:包括Java的异常捕获机制、自定义异常、使用断言以及...

    最新Java面试题

    - **基本数据类型和包装类**:Java为每种基本数据类型提供了一个对应的包装类,例如`Integer`对应`int`。 - **`Integer`与`int`的区别**:`Integer`是对象类型,支持更多方法;`int`是基本数据类型。 - **`String`类...

Global site tag (gtag.js) - Google Analytics