`

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开发技术大全(500个源代码).

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

    廖雪峰 Java 教程.doc

    包装类型 JavaBean 枚举类 BigInteger BigDecimal 常用工具类 异常处理 Java的异常 捕获异常 抛出异常 自定义异常 使用断言 使用JDK Logging 使用Commons Logging 使用Log4j 使用SLF4J和Logback ...

    java常用工具类的使用

    而在Java类库中有一个Arrays类的sort方法已经实现各种数据类型的排序算法。程序员只需要调用该类的方法即可。 代码演示:Arrays实现排序 public static void main(String[] args) { int[] ages={23, 45,12,76,34,...

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

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

    JAVA基础课程讲义

    基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用方法(已讲过,不再讲!) ...

    Java开发详解.zip

    020612_【第6章:面向对象(高级)】_包装类笔记.pdf 020613_【第6章:面向对象(高级)】_匿名内部类笔记.pdf 020701_【第7章:异常的基本概念】_异常的基本概念笔记.pdf 020702_【第7章:异常的基本概念】_异常的...

    Java语言基础下载

    包装类 97 toString( )方法 100 内容总结 101 独立实践 102 第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,接口 115 内容总结 120 独立实践 121 第八章...

    基于某JAVA地剪刀石头布游戏设计——Java课程设计报告材料-.doc

    目 录 前言3 1剪刀石头布游戏设计思路阐述4 2程序概要设计5 功能需求分析5 性能需求分析5 程序框图5 Java类与自定义类相互继承的层次关系6 Java类与自定义类的说明6 类中成员与作用7 2.5程序运行效果与存在的问题7 ...

    Java开发技术大全 电子版

    2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 2.3.8变量赋初值33 2.3.9变量的作用域34 2.3.10数据类型转换34 2.4运算符与...

    基于JAVA的剪刀石头布游戏设计.docx

    目 录 前言 3 1剪刀石头布游戏设计思路阐述 4 2程序概要设计 5 2.1功能需求分析 5 2.2性能需求分析 5 2.3程序框图 5 2.4 Java类及自定义类相互继承的层次关系 6 2.4.1 Java类及自定义类的说明 6 2.4.2类中成员及作用...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    5.3 包装类的使用 114 实例093 将字符串转换成整数 114 实例094 整数进制转换器 115 实例095 查看数字的取值范围 116 实例096 ASCII编码查看器 117 实例097 Double类型的比较 118 5.4 面向对象的特征 119 实例098 ...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    10.4基本数据类型的包装类 10.4.1认识包装类 10.4.2通过包装类进行数据转换 10.5认识Java集合 10.5.1为什么需要集合 10.5.2Java中的集合 10.6使用一维集合 10.6.1认识一维集合 10.6.2使用List集合 10.6.3...

    Java学习笔记-个人整理的

    {4.10}包装类}{87}{section.4.10} {4.11}集合的复制}{88}{section.4.11} {4.12}集合的同步化}{89}{section.4.12} {4.13}集合转换为数组}{89}{section.4.13} {4.14}数组转换为集合}{89}{section.4.14} {4.15}...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    7.11.3 定义引用类类型的复制构造函数 346 7.11.4 类属性 346 7.11.5 initonly字段 358 7.11.6 静态构造函数 360 7.12 小结 360 7.13 练习 360 7.14 本章主要内容 361 第8章 深入理解类 363 8.1 类析构函数 ...

    HttpClient以及获取页面内容应用

    1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1 2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。 3. 支持HTTPS协议。 4. 通过Http代理建立透明的...

    APIJSONParser:将JSON转换为SQL,APIJSON编译器,将JSON动态编译成SQL

    主要分三步:权限判断,解析生成SQL,包装成制定格式的响应APIJSONParser是其中的解析生成SQL过程的一个工具类,提供将创建格式的JSON对象转换生成标准SQL,如果您想自定义格式,可以完全支持您进行自由扩展。...

Global site tag (gtag.js) - Google Analytics