Java基础知识(JAVA基本数据类型包装类)
基本数据类型的包装类
为什么需要包装类?
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
Java基础知识(JAVA基本数据类型包装类)的更多相关文章
- JAVA基础知识|java虚拟机(JVM)
一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...
- java基础知识——Java的定义,特点和技术平台
(作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...
- [java基础知识]java安装步骤
jre: java运行环境. jre = java虚拟机 + 核心类库(辅助java虚拟机运行的文件).如果只是运行java程序,只需要安装jre. jdk: java开发工具集 jd ...
- java基础知识—变量、数据类型和运算符
1.变量:存储数据的一个基本单元.2.变量的声明和赋值: 1)声明并赋值;数据类型 变量名=值 例如:int prince=10; 2) 声明.赋值分为两步: 数据类型 变量名: 例如:int=pri ...
- java 基础知识(java web 方面的)
1.java面向对象的基本特征:封装性,多态性,继承性. 2.Java的泛型:iterator接口主要有hasnext()方法,next()方法,remove()方法:collection接口继承了i ...
- [转] Java基础知识——Java语言基础
http://blog.csdn.net/loneswordman/article/details/9905931 http://blog.csdn.net/wanghuan203/article/d ...
- java基础知识精华
转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...
- Java基础(二) 基本类型数据类型、包装类及自动拆装箱
我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
随机推荐
- MySQL常见错误码及说明
1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败<=================可以忽略1008:数据库不存在,删除数据库失败<=========== ...
- [Tensorflow] Cookbook - CNN
Convolutional Neural Networks (CNNs) are responsible for the major breakthroughs in image recognitio ...
- Git使用基础篇
Git使用基础篇 前言 Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多 ...
- manjaro 设置 国内源
注意,如果安装过程中出现无法连接服务,请参看第 4条. 1. 设置官方镜像源(包括 core, extra, community, multilib ) $ sudo pacman-mirrors - ...
- 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 ...
- 配置hadoop集群,完全分布式模式
[/soft/hadoop/etc/hadoop] [hdfs-site.xml] <configuration> <property> <name>dfs.rep ...
- [No0000FB]C# 命名空间(Namespace)
命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式.在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突. 定义命名空间 命名空间的定义是以关键字 namespace ...
- 一个按成绩排序SQL的写法问题
测试数据: SQL> select * from sscore; NAME SCORE ---------- ----- aa 99 bb ...
- __dict__和dir()的区别:未完
1. dir()是一个函数,返回的是list.__dict__是一个字典,键为属性名,值为属性值: 2. dir()用来寻找一个对象的所有属性,包括__dict__中的属性,所以说__dict__ ...
- day0319 模块
一.序列化 将原本的字典,列表等内容转化成一个字符串的过程就是序列化. 序列化的目的: 1.以某种存储形式使自定义对象持久化 2.将对象从一个地方传递到另一个地方. 3.程序更具有维护性 二. Jso ...