基本数据类型的包装类

为什么需要包装类?

Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中,这是,我们就需要将基本类型数据转化为对象。

包装类均位于java.lang包,使用时不需要导入,系统自动导入。Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。

包装类和基本数据类型的对象关系:

基本类型  包装器类型
boolean Boolean
char Character
int Integer
byte Byte
short Short
long Long
float Float
double Double

如何使用包装类?

包装类的作用:

  • 提供:字符串、基本数据类型、对象之间互相转化的方式!
  • 包含每种基本数据类型的相关属性,如:最大值、最小值等

由于八个包装类的使用比较类似,下面以最常用的Integer类为例子介绍包装类的实际使用。Integer类继承Number父类。

1、实现int和Integer类之间的转换(该过程中使用了自动装箱和自动拆箱的原理)

在实际转换时,使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换,实现的代码如下:

int n = 10;
Integer in = new Integer(100);
//将int类型转换为Integer类型
Integer in1 = new Integer(n);
//将Integer类型的对象转换为int类型
int m = in.intValue();

2、Integer类内部的常用方法

在Integer类内部包含了一些和int操作有关的方法,下面介绍一些比较常用的方法:

a、parseInt方法

public static int parseInt(String s)

该方法的作用是将数字字符串转换为int数值。在以后的界面编程中,将字符串转换为对应的int数字是一种比较常见的操作。使用示例如下:

String s = “123”;
int n = Integer.parseInt(s);

则int变量n的值是123,该方法实际上实现了字符串和int之间的转换,如果字符串都包含的不是都是数字字符,则程序执行将出现异常。

另外一个parseInt方法:

public static int parseInt(String s, int radix)

则实现将字符串按照参数radix指定的进制转换为int,使用示例如下:

//将字符串”120”按照十进制转换为int,则结果为120
int n = Integer.parseInt(“120”,10);
//将字符串”12”按照十六进制转换为int,则结果为18
int n = Integer.parseInt(“12”,16);
//将字符串”ff”按照十六进制转换为int,则结果为255
int n = Integer.parseInt(“ff”,16);

这样可以实现更灵活的转换。

b、toString方法

public static String toString(int i)

该方法的作用是将int类型转换为对应的String类型。

使用示例代码如下:

int m = 1000;
String s = Integer.toString(m);
//则字符串s的值是”1000”。

在进行包装类与基本数据类型之间进行数值之间的转化时,我们经常使用的自动装箱和自动拆箱。这是JDK5.0的新增的特性。

自动装箱和自动拆箱(auto-boxing & auto-unboxing)

JDK5.0的一个新特性是自动装箱和自动拆箱。

自动装箱

  • 基本类型就自动地封装到与它相似类型的包装中,如:Integer i = 100;
  • 本质上是,编译器编译时自动添加:Integer i = new Integer(100);

自动拆箱

  • 包装类对象自动转换成基本数据类型。如:int a = new Integer(100);
  • 本质是上,编译器编译时自动添加:int a = new Integer(100).intValue();

在Integer类中自动装箱和自动拆箱问题中遇到的问题:

Integer  d = 1234;
Integer d2 = 1234; System.out.println(d==d2);
System.out.println(d.equals(d2)); System.out.println("###################");
Integer d3 = -100; // [-128,127]之间的数,仍然当做基本数据类型来处理。
Integer d4 = -100;
System.out.println(d3==d4);
System.out.println(d3.equals(d4));

显示结果:

false
true
###################
true
true

当两个数都是100的时候==判断相等,当两个数都是200的时候判断不相等。

原因:查看内部实现代码可知,Integer类有一个缓存问题,它会缓存-128~127之间的整数。也就是说如果将-128~127之间的数值赋值给Integer类对象,在比较两个对象(d3==d4)时比较的是两个对象的数值。超过这个范围比较的是对象的内存地址。

参考:

http://www.mamicode.com/info-detail-1015549.html

http://www.jobui.com/mianshiti/it/java/7088/

http://cakin24.iteye.com/blog/2326545

http://lib.csdn.net/article/javase/2159(以上内容转自此篇文章)

http://www.cnblogs.com/mengdd/archive/2013/01/21/2869921.html

http://www.jianshu.com/p/5d7c9b077771

http://www.cnblogs.com/huajiezh/p/5225637.html

http://www.cnblogs.com/xianzheng/p/5205968.html

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

Java基础知识(JAVA基本数据类型包装类)的更多相关文章

  1. JAVA基础知识|java虚拟机(JVM)

    一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...

  2. java基础知识——Java的定义,特点和技术平台

    (作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...

  3. [java基础知识]java安装步骤

    jre:  java运行环境.  jre =  java虚拟机 + 核心类库(辅助java虚拟机运行的文件).如果只是运行java程序,只需要安装jre.    jdk: java开发工具集   jd ...

  4. java基础知识—变量、数据类型和运算符

    1.变量:存储数据的一个基本单元.2.变量的声明和赋值: 1)声明并赋值;数据类型 变量名=值 例如:int prince=10; 2) 声明.赋值分为两步: 数据类型 变量名: 例如:int=pri ...

  5. java 基础知识(java web 方面的)

    1.java面向对象的基本特征:封装性,多态性,继承性. 2.Java的泛型:iterator接口主要有hasnext()方法,next()方法,remove()方法:collection接口继承了i ...

  6. [转] Java基础知识——Java语言基础

    http://blog.csdn.net/loneswordman/article/details/9905931 http://blog.csdn.net/wanghuan203/article/d ...

  7. java基础知识精华

    转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...

  8. Java基础(二) 基本类型数据类型、包装类及自动拆装箱

    我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...

  9. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  10. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

随机推荐

  1. 多线程开发之一 NSThread

    每个 iOS 应用程序都有个专门用来更新显示 UI 界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来不好的用户体验. 一般的解决 ...

  2. [Laravel] 16 - DB: Eloquent

    前言 一.大纲 写后端API,与数据库打交道无疑是很重要的角色. PHP数据库操作:从MySQL原生API到PDO PHP数据库操作:使用ORM Ref: [PHP] 07 - Json, XML a ...

  3. 单元测试以文件流的形势传参调用api进行测试

    [TestMethod] public void Test() { byte[] buffer;//文件转换为二进制流 string path = @"E:\aaa"; Encod ...

  4. OpenGL——折线图柱状图饼图绘制

    折线图绘制代码: #include<iostream> //旧版本 固定管线 #include<Windows.h> #include <GL/glut.h> // ...

  5. xrdp完美实现Windows远程访问Ubuntu 16.04

    前言: 在很多场景下,我们需要远程连接到Linux服务器(本文是Ubuntu),传统的连接主要分为两种. 第一种:通过SSH服务(使用xshell等工具)来远程访问,编写终端命令,不过这个是无界面的, ...

  6. 关于思科C2950交换机清除密码,恢复初始配置的方法

    上个月河南做项目,因需要大批量的对服务器进行操作系统的安装,于是想到了PXE网络批量安装, 好不容易到机房的仓库找到网线及一台思科交换机,但到安装的时候,发现思科交换机里应该有配置了 通过配置线连接交 ...

  7. J - 哈密顿绕行世界问题

    一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行 ...

  8. http://202.194.116.8/webapps/portal/frameset.jsp?tab_id=_2_1&url=%2fwebapps%2fblackboard%2fexecute%2

    http://202.194.116.8/webapps/portal/frameset.jsp?tab_id=_2_1&url=%2fwebapps%2fblackboard%2fexecu ...

  9. Linux/Unix 常用参数使用说明

    参数使用说明 ~ 表示当前用户目录 绝对路径 .表示当前目录 绝对路径 | 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 举例 ps aux | grep & ...

  10. js callback 和 js 混淆

    function test(a,callback){ a+=100; callback(a) } function abc(a){ a+=100; alert(a); } test(5,abc) js ...