基础数据类型包装类

当一个程序要求交互式输入一个int类型的年龄时,从文本框中输入的结果肯定是String类型的。要在程序中进行相关操作,它必须先转换为int类型。因此可以使用数据类型的转换或强制转换,但这种转换方式太过简单,功能太少,因此java中提供了数据类型包装类的概念。

数据类型包装类是指可以将数据转换成对象(包装),还可以从数据对象中取得数据(解包装)。相当于对数据包了一层皮,里面的内容不变,但既然是对象,就有了很多数据操作的方法。包装的过程是将栈空间的数据复制到堆空间的对象中,这个对象中的内容就是所需要的数据。

byte对应的包装类为Byte;
short --> Short;
int --> Integer;
long --> Long;
float --> Float;
double --> Double;
boolean --> Boolean;
char --> Character;

这些数据类型包装类的功能大多都相似,提供的各种方法也大多相似。其中最重要功能之一是:数据类型和String类型之间互相转换。★★★★★

以Integer包装类为例:

基本功能:

  1. 它有几个字段属性:MAX_VALUE、MIN_VALUE,这两个分别表示int类型的数据最大值和最小范围值。

    System.out.println(Integer.MAX_VALUE);
    
  2. 提供了将int数据转换成二进制、八进制、十六进制的方法,返回值为String类型:
    System.out.println(Integer.toBinaryString(20));
    
  3. 将String类型数据转换为Int类型的方法parseInt(),显然返回值为Int类型:
    System.out.println("123"+2);
    System.out.println(Integer.parseInt("123")+2);
    System.out.println(Integer.parseInt("a123")+2); //Exception:NumberFormatException
    

    还有个重载的方法,用于将其他进制的值转换为十进制:

    System.out.println(Integer.parseInt("110",2));
    

    其它数据类型包装类也同样有String转对应类型的解析方法:parseByte()、parseDouble()等,但character没有,因为它本身就是字符。

  4. int类型转String类型
    System.out.println(Integer.toString(110)+2);
    System.out.println(String.valueOf(110)+2);
    System.out.println(110+""+2);
    
  5. 将int数值装进integer对象中,可以通过构造方法或valueOf()方法实现。构造方法和valueOf()都重载了两种参数的写法,一个是int参数,一个是String参数:
    int i = new Integer(4);
    int ii = new Integer("4");
    int iii = Integer.valueOf(4);
    int iii = Integer.valueOf("4");
    
  6. xxxValue()方法取出对象中的值,并转换为数值类型。因为操作的是对象,因此该类方法是非静态方法,需要以对象名调用来返回该对象中包装的值:
    int i = new Integer(4);
    int num = i.intValue();   //对象调用,并返回为int类型
    Long num = i.LongValue(); //取出对象i中的值,并转换为Long类型
    
  7. 判断Integer对象是否相等。Integer重写了equals()方法,只要对象中的值相同,对象就相等:
    int x = new Integer(3);
    int y = new Integer(3);
    System.out.println(x==y);        //false
    System.out.println(x.equals(y)); //true
    

自动装箱、自动拆箱特性:

要操作一个数值,需要定义一个int类型的变量:int i = 4;,要使用Integer类的一些通用方法,需要定义一个Integer类的对象Integer i = new Integer(4);。要对int变量执行方法,需要先将其封装为Integer类对象,或者反过来,要加减乘除Integer对象,需要将其转换为int数据类型,之间的来回转换极为麻烦。

从jdk 1.5开始,支持自动装箱、拆箱的功能。

Integer i = 4;

定义一个引用类型变量i,引用类型只能指向对象,所以4自动转换为对象,所以等号右边这等价于使用了Integer.valueOf(4)。Integer.valueOf()重写的方法中实际上是调用了new Integer()。所以下面的几种写法是等价的:

Integer i = 4;
Integer i = new Integer(4);
Integer i = Integer.valueOf(4);

自动拆箱则相反,是指自动取出对象中的值。

Integer i = 4;
i = i + 5;

其中"i+5"是数值运算,i首先从对象转换为数值,得到9。而等号左边的i是对象引用,所以还要再将9自动装箱为对象。所以等价于下面的代码:

i = Integer.valueOf(i.intValue()+5);

由此可见,自动装箱、拆箱的特性,极大地增强了可读性。

但自动装箱的过程有一点小细节:当数值在byte范围内(-128-127)时,自动装箱时不会新创建对象。意思是当有一个Integer x对象中的值为3时,它小于127,如果还有一个Integer y,它的值也是3,那么x和y指向同一个对象。

Integer x = new Integer(3);
Integer y = new Integer(3);
System.out.println(x==y);        //false
System.out.println(x.equals(y)); //true
Integer a = 3;
Integer b = 3;
System.out.println(a==b);        //true
System.out.println(a.equals(b)); //true
Integer c = 128;
Integer d = 128;
System.out.println(c==d);        //false
System.out.println(c.equals(d)); //true

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7783126.html

注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

转载于:https://www.cnblogs.com/f-ck-need-u/p/7783126.html

java基础数据类型包装类相关推荐

  1. java基础数据类型包装类的作用

    在java中,提起int,float,byte这些基础数据类型,自然就会想到他们各自对应的包装类了.那么你有没有想过,java大牛们为什么会设计包装类呢? 首先,Integer等包装类更加体现了面向对 ...

  2. Java数字包装类基本程序,Java基本数据类型包装类

    基础数据类型包装类 当一个程序要求交互式输入一个int类型的年龄时,从文本框中输入的结果肯定是String类型的.要在程序中进行相关操作,它必须先转换为int类型.因此可以使用数据类型的转换或强制转换 ...

  3. JAVA基础数据类型转化

    JAVA基础数据类型转化 1.根据基础数据储存空间可以将基础数据类型做以下排列 //浮点数类型要比整数类型大 // byte,short,char=>int=>long=>float ...

  4. Java基础-数据类型int,short,char,long,float,double,boolean,byte

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  5. Java 基础数据类型

    Java 提供的基础数据类型(也称内置数据类型)包含:整数类型.浮点类型.字符类型.布尔类型. 整数类型 整数类型变量用来表示整数的数据类型.整数类型又分为字节型(byte).短整型(short).整 ...

  6. java基础 -- 数据类型,基本程序结构

    JAVA基础概念 程序示例 //public 访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别 // 关键字 class 表明Java程序中全部的内容都包含在类中,这里只需要将类作为加 ...

  7. 谈谈Java基础数据类型

    Java的基本数据类型 类型 意义 取值 boolean 布尔值 true或false byte 8位有符号整型 -128~127 short 16位有符号整型 -pow(2,15)~pow(2,15 ...

  8. 详解Java基础数据类型

    Java的数据类型 在java语言中,数据类型分为基础数据类型和引用数据类型,每一个变量都必须声明一种类型.基础数据类型是直接包含魔法值,而引用数据类型则是引用对象.在本章中,只解读Java语言中的基 ...

  9. java基础数据类型与String类型区别

    区别:Java内存存放位置不一样,基本数据类型存在栈(stack),String的对象实例存在堆(heap).另外String,不是基本数据类型,判断是否相等,不能使用==,而应该使用equals方法 ...

最新文章

  1. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
  2. linux系统中tar命令的使用,linux 系统的tar命令使用方法详解
  3. [architecture]-armv8-aarch64种的SIMD/FP指令介绍
  4. oracle spool .dbf,oracle技术之oracle spool的简单使用
  5. ElementUI的el-form表单验证报错[Element Warn][Form]model is required for validate to work!
  6. 阿里云江岑:云原生在边缘形态下的升华
  7. 测试面试题集-Python编程题(1)
  8. opencart配置United States Postal Service快递
  9. Bailian3143 验证“歌德巴赫猜想”【筛选法】
  10. NYOJ833 - 取石子(七)
  11. 20160205 - Windows 10 家庭版没有组策略
  12. 外卖系统源码,如何搭建一套同城o2o外卖商城平台
  13. Logistic回归分析
  14. 项目经理要具备的三种能力
  15. git报错-执行git pull 报错信息:error: 工作区中下列未跟踪的文件将会因为合并操作而被覆盖:
  16. 安装算量软件快速计算管道管件功能
  17. 可变参数和Steam流的基本使用
  18. BME相关SCI期刊
  19. 通达信接口公式怎样进行破解?
  20. 第一章:随机事件和概率(一)

热门文章

  1. c语言程序如何链接到数据库,c语言如何链接到数据库
  2. 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
  3. mysql 自增长id string_Mysql中获取刚插入的自增长id的三种方法归纳
  4. sql 纵向求和_sql 行列转换 求和平均值等
  5. 【Luogu 3389】【模板】高斯消元法(用高斯消元求解线性方程组)
  6. 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2
  7. Win10删除资源管理器左侧的Onedrive图标
  8. checkbox 点击搜索失去焦点_早些年植入三焦点晶体矫正老花的人,现在怎么样了?...
  9. msf 生成php马_PHP的性能优化方法总结
  10. html5之input标签学习