基础数据类型包装类

当一个程序要求交互式输入一个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. 可操作性强!Python实现一个电影订票系统!
  2. 四大运营商的5G部署路线一览
  3. boost::biconnected_components用法的测试程序
  4. java设计模式通俗_通俗易懂的Java设计模式之工厂方法模式
  5. 计算机上机模拟试题答案,2016计算机二级上机模拟试题及答案
  6. 您的主机不满足在启用Hyper-V 或DeviceCredential Guard的情况下运行VMware player的最低要求
  7. h5文字垂直居中_CSS实现居中的几种方式你都了解吗?
  8. Linux 内核漏洞可用于逃逸 Kubernetes 容器
  9. Android Studio开发实战(新手入门)一
  10. K8S集群模式下fluent-bit日志收集方案设计和实践
  11. 电脑模拟收银机_模拟超市的收银系统
  12. LoRa协议在Arduino上的应用——原理及代码分析(一)
  13. Android 12之启动画面Splash Screens(一) -- 适配
  14. 群晖套件中心没有docker_非Docker方法安装qBittorrent,舒心玩转PT
  15. 麦吉尔大学的数学与计算机科学,麦吉尔大学数学与计算机科学本科.pdf
  16. linux docker启动指定字符集,【字符集】解决docker 容器中中文乱码问题
  17. 优酷视频kux格式转换为MP4的两种技巧
  18. LDAP、OLAP、OLTP详细介绍
  19. 全球十大外盘外汇交易平台排行榜
  20. UDP 编程中的sendto() 与recvfrom()解析(转)

热门文章

  1. Android ContentResolver
  2. Inside Linux kernel
  3. highcharts使用教程
  4. VirtualBox uuid冲突问题
  5. .Net学习难点讨论系列16 - 索引器
  6. 安装VM虚拟机提示 尝试创建目录 C:\Public\documents\SharedVirtual Machines 时发生错误解决方法
  7. 多线程下ArrayList类线程不安全的解决方法及原理
  8. ssh可以连接但sftp不可以连接解决方案
  9. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题
  10. GET和POST提交乱码解决方案