基础数据类型包装类

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

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

byte对应的包装类为Byte;

short --> Short;

int --> Integer;

long --> Long;

float --> Float;

double --> Double;

boolean --> Boolean;

char --> Character;

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

以Integer包装类为例:

基本功能:

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

System.out.println(Integer.MAX_VALUE);

提供了将int数据转换成二进制、八进制、十六进制的方法,返回值为String类型:

System.out.println(Integer.toBinaryString(20));

将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没有,因为它本身就是字符。

int类型转String类型:

System.out.println(Integer.toString(110)+2);

System.out.println(String.valueOf(110)+2);

System.out.println(110+""+2);

将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");

xxxValue()方法取出对象中的值,并转换为数值类型。因为操作的是对象,因此该类方法是非静态方法,需要以对象名调用来返回该对象中包装的值:

int i = new Integer(4);

int num = i.intValue(); //对象调用,并返回为int类型

Long num = i.LongValue(); //取出对象i中的值,并转换为Long类型

判断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

Java数字包装类基本程序,Java基本数据类型包装类相关推荐

  1. java入门~第十五天 基本数据类型包装类,各种常用类.以及正则表达式md

    1.基本数据类型包装类 1.01基本类型包装类的概述 需求: a:将100转换成二进制 , 八进制 , 十六进制 b:判断一个数是否在int的范围内 if(25252525>=Integer.M ...

  2. java 简单的计算器程序,Java 简易计算器程序

    最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考. 呵呵,哈哈!!! import java.awt.Container; import java.awt.Fl ...

  3. java多客户端聊天程序,java – 多客户端聊天程序,向所有客户端广播聊天?

    我正在尝试制作一个可以容纳多个客户端的非常简单的聊天程序.我有一个多线程服务器,可以连接多个客户端,但服务器只与单个客户端通信(因为它应该,每个客户端都在自己的线程上)我需要帮助让服务器发送来自所有连 ...

  4. java 数字1类型_java-1.基础与数据类型

    第三节数据类型 1.Java程序基本结构 package Mr;定义了 Java程序中类所在的包是Mr,其中Mr是一个标识符 public class Example是创建类的语句,其中public是 ...

  5. java能调用python吗_如何使用运行时在Java中调用python程序 - java

    我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...

  6. java的算术表达式程序,java计算数学表达式

    import java.util.EmptyStackException; import java.util.Stack; public class CaculateFunction { privat ...

  7. JAVA日历窗口小程序,Java日历的小程序

    Java写的日历小程序,算法效率虽然不算很高,却是简单实用的 CalendarBean.java import java.util.Calendar; public class CalendarBea ...

  8. java万能万年历的程序,java 实现万年历

    以前初学java写万年历,都是采用基本的算法求出是否闰年闰月 计算公式如下 int year = 2014, month = 8, total = 0; if (month == 1 || month ...

  9. java实现表白小程序——java小程序

    今天闲来无事,教大家一个哄妹子的小case.我们需要创建一个心形图案,按照心形图案的位置和长度,对所创建的字符串进行截断并在所需的位置上输出,最终能呈现在屏幕上满满的爱心.废话不多说,直接上源码看效果 ...

最新文章

  1. android6鼠标驱动,USB鼠标按键驱动(示例代码)
  2. stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗
  3. 微软公司部署小型数据中心网络连接产品
  4. URL编解码、Big Endian和Little Endian
  5. 【Git入门之五】版本管理
  6. bp matlab 训练参数,基于MATLABBP神经网络设计与训练.PDF
  7. centos7安装xterm_CentOS 7使用x-manager中Xstart工具报缺少xterm包错误
  8. java服务端异步处理机制_Java异步处理机制实例详解
  9. 女生天生就是产品经理
  10. Nginx下配置多个web服务
  11. excel 图表制作--趋势线误差线
  12. OPPO技术开放日第六期丨OPPO安全解析“应用与数据安全防护”背后的技术
  13. 2021-07-12 怎么将桌面图标变大变小
  14. java jse jee jme_Java学习笔记(1) --JSE 、JEE、 JME三者的区别
  15. 治疗“实火”引起的急性口腔溃疡及清新口气的方法
  16. 2021年Q1微信视频号生态趋势调查报告 | 友望数据
  17. 6.5 负反馈对放大电路性能的影响
  18. Linux_centos版初学(基础命令)
  19. 微信公众号开发者接入
  20. 第9章 慕课网日志实战

热门文章

  1. (Excel)常用函数公式及操作技巧之四:文本与页面设置(二)
  2. TortoiseSVN SendRpt.exe not found解决方案
  3. 怎么解决svn清理失败且路径显示乱码问题
  4. IDEA——找不到或无法加载主类的一种暴力解决方法
  5. 解决yum 不能更新问题 :yum 报错Loaded plugins: fastestmirror, refresh-packagekit, security
  6. shell脚本中的YYYY-MM-DD格式日期
  7. 如何使用JavaScript更改元素的类?
  8. 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
  9. spring 获取配置文件的值
  10. 【CentOS 7MySQL常用操作2】,连接MySQL#180112