虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。

这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得多。为解决此类问题 ,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。

基本数据类型及对应的包装类

基本数据类型对应的包装类

byte

Byte

short

Short

int

Integer

long

Long

char

Character

float

Float

double

Double

boolean

Boolean

每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。

基本类型和对应的包装类可以相互装换:

由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;

包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。

包装类的应用

八个包装类的使用比较相似,下面是常见的应用场景。

1) 实现 int 和 Integer 的相互转换

可以通过 Integer 类的构造方法将 int 装箱,通过 Integer 类的 intValue 方法将 Integer 拆箱。例如:

public classDemo {

public static void main(String[] args) {

int m = 500;

Integerobj = new Integer(m); // 手动装箱

int n = obj.intValue(); // 手动拆箱

System.out.println("n = " + n);

Integerobj1 = new Integer(500);

System.out.println("obj 等价于 obj1?" + obj.equals(obj1));

}

}

运行结果:

n = 500

obj 等价于 obj1?true

2) 将字符串转换为整数

Integer 类有一个静态的 paseInt() 方法,可以将字符串转换为整数,语法为:

parseInt(Strings, int radix);

s 为要转换的字符串,radix 为进制,可选,默认为十进制。

下面的代码将会告诉你什么样的字符串可以转换为整数:

public classDemo {

public static void main(String[] args) {

Stringstr[] = {"123", "123abc", "abc123", "abcxyz"};

for(Stringstr1 : str){

try{

int m = Integer.parseInt(str1, 10);

System.out.println(str1 + " 可以转换为整数 " + m);

}catch(Exceptione){

System.out.println(str1 + " 无法转换为整数");

}

}

}

}

运行结果:

123 可以转换为整数 123

123abc 无法转换为整数

abc123 无法转换为整数

abcxyz 无法转换为整数

3) 将整数转换为字符串

Integer 类有一个静态的 toString() 方法,可以将整数转换为字符串。例如:

public classDemo {

public static void main(String[] args) {

int m = 500;

Strings = Integer.toString(m);

System.out.println("s = " + s);

}

}

运行结果:

s = 500

自动拆箱和装箱

上面的例子都需要手动实例化一个包装类,称为手动拆箱装箱。Java 1.5(5.0) 之前必须手动拆箱装箱。

Java 1.5 之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。例如:

public classDemo {

public static void main www.120xh.cn (String[] args) {

int m = 500;

Integerobj = m; // 自动装箱

int n = obj; // 自动拆箱

System.out.println("n = " + n);

Integerobj1 = 500;

System.out.println("obj 等价于 obj1?" + obj.equals(obj1));

}

}

运行结果:

n = 500

obj 等价于 obj1?true

自动拆箱装箱是常用的一个功能,读者需要重点掌握。

java中byte装箱和装箱_Java包装类、拆箱和装箱详解相关推荐

  1. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

  2. java double 装箱_Java自动拆箱和装箱

    一.什么是装箱/拆箱 在讲之前,得先提一下为什么两个概念:基本数据类型及其包装类,我们都知道Java是一种面向对象的语言,但是Java中的基本数据类型是不面向对象的,这时在使用中便会存在诸多的不便,为 ...

  3. 包装类------拆箱与装箱

    1.面向对象    包装类型 boolean java.long.Boolean byte java.long.Byte short java.long.Short int java.long.Int ...

  4. Java中的IO、NIO、File、BIO、AIO详解

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?         Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包 ...

  5. Java中的锁原理、锁优化、CAS、AQS详解

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:景小财 www.jianshu.com/p/e674ee68 ...

  6. Java中的锁原理、锁优化、CAS、AQS详解!

    阅读本文大概需要 2.8 分钟. 来源:jianshu.com/p/e674ee68fd3f 一.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 二.锁实现的基本原理 2.1.v ...

  7. java中 byte 取值范围_java中为什么byte的取值范围是-128到+127

    概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: ...

  8. java实现线程同步的方法_Java实现线程同步方法及原理详解

    一.概述 无论是什么语言,在多线程编程中,常常会遇到多个线同时操作程某个变量(读/写),如果读/写不同步,则会造成不符合预期的结果. 例如:线程A和线程B并发运行,都操作变量X,若线程A对变量X进行赋 ...

  9. java中ssm付款代码,ssm实现支付宝支付功能(图文详解)

    目录 1.支付宝沙箱环境测试 2.支付宝整合到ssm环境 3.微信支付整合到ssm环境 一.支付宝测试环境代码测试 1.下载电脑网站的官方demo: 2.下载解压导入eclipse readme.tx ...

  10. java中commons-net包_Apache commons net 包介绍和简单使用详解

    Apache commons net 项目中封装了各种网络协议的客户端,支持的协议包括: ·        FTP ·        NNTP ·        SMTP ·        POP3 ...

最新文章

  1. matplotlib输出图形到网页_必学python库Matplotlib教程分享
  2. Django默认用户认证系统和用户模型类
  3. 基于php的地铁查询系统,HTML5 Canvas实现交互式地铁线路图
  4. 单点登录(sso)入门
  5. 4本数据库新书,大神都在追着看
  6. php无法连接远程服务器,php-无法在远程服务器上包含文件
  7. LeetCode 368. 最大整除子集(动态规划)
  8. ==、Equals 、ReferenceEquals它们的异同
  9. C++制作植物大战僵尸
  10. unity-shader-头发渲染-各向异性
  11. win7云服务器访问网站很慢,告诉你Win7网速慢是什么原因,网速慢怎么办
  12. document.onclick是什么
  13. #读书笔记—《自控力》第一章
  14. 关于unity中使用solidwork模型材质及动画丢失问题
  15. uniapp 腾讯云活体人脸核身(超详细)
  16. 谷歌商店输入账号密码后 回到登录界面/闪退
  17. 宝塔Linux面板问题QA汇总
  18. VS2016 发布项目提示 CS0006 C# Metadata file 'xxxxxxx.dll' could not be found
  19. 你会爬虫吗,我来教你爬海关蜀黍
  20. 王家林老师人工智能AI 第26课:使用Apriori对美食店的消费者进行美食推荐 老师微信13928463918

热门文章

  1. [转载]SIFT(尺度不变特征变换)算法小结
  2. python查找元素的下标 leetcode 392
  3. linux镜像文件的rpm,REDHAT安装镜像里的RPM文件02
  4. c语言switch自动贩卖机,JAVA程式-自动贩卖机SWITCHampCASE.doc
  5. keil及iar调试解释
  6. 耗时1年的前端技术框架切换之旅
  7. 5G多输入多输出技术,到底是个啥东东?
  8. RDS、DDS和GaussDB理不清?看这一篇足够了!
  9. 云小课 |选定合适的证书,做“有证”的合规域名
  10. 华为与五粮液签署战略合作协议