什么是包装类?
在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。
-
- a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
- b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
Auto-box自动装箱功能
什么是Auto-boxing?
首先不说定义,先假设没有Autoboxing和unboxing功能,我们使用包装类就如同一般类一样
这样我们创建对象就要这样:
//1.用平时创建类的方法创建包装类
int x=100;
Integer w_x=new Integer(1000);//符合先声明new对象
double z=500.567;
Double w_z=new Double(456.789);
float f='Y';
Float w_f=new Float('Y');
String w_s=new String("yes");
然后我们如何返回实例的值呢?当然用到方法了:
//2.返回这些的值
System.out.println("----------------");
System.out.println("w_x="+w_z.intValue());
System.out.println("w_z="+w_z.doubleValue());
System.out.println("w_f="+w_f.floatValue());
System.out.println("w_s="+w_s);
/*输出:
w_x=456
w_z=456.789
w_f=89.0
w_s=yes
*/
是不是很麻烦?不麻烦?那就让我们见识一下Autoboxing和unboxing的优点,在JDK1.5之后,有了这个特性
当我们需要使用包装类时候,在语法上首先可以和基本类型一样,但是因为类又有很多方法可以使用,所以
包类的功能增强了不少如下:
//4.JDK 1.5之后的AutoBOX功能
//如基本类型一样复制,自动装箱供转换为 new Integer(xxx);
Integer l1=100;
Double d1=789.123;
Character c1='n';
Boolean b1=false;//只能true或者false
String s1="Auto-box";
//直接拆箱子
System.out.println("----------------");
System.out.println(l1);
System.out.println(d1);
System.out.println(c1);
System.out.println(b1);
System.out.println(s1);
/*输出:
----------------
100
789.123
n
false
Auto-box
----------------
*/
是不是很方便?在赋值时候有了这个特性,编译器自动帮我们完成一些工作。
自动装箱也存在一些特殊性,例如在用"=="我们可以比较两个基本类型是否相等,
那么我们能不能用此比较包装类是否相等呢?
//1.包装类用== 比较大小
System.out.println("----------------");
System.out.println("Integer(2)是否等于Integer(2)? "+(new Integer(2)==new Integer(2)));
//输出 false ,引用类型用==判断只有指向同一个对象才返回true
//Auto-box情况下的不同情形
Integer i5=3;
Integer i6=3;
System.out.println("I6是否等于I5? "+(i6==i5));//返回true
Integer i7=128;
Integer i8=128;
System.out.println("I7是否等于I8? "+(i7==i8));//返回false
/*为什么返回false?
因为Auto把-128~127证书自动装箱为一个Integer实例,还放入一个数组
因此每次赋值在这个范围总是指向这个实例的这个数字,所以指向一个地址,
超过这个范围就要重新创造new一个新的实例
*/
System.out.println("----------------");
----------------
Integer(2)是否等于Integer(2)? false
I6是否等于I5? true
I7是否等于I8? false
----------------
正如注释所说,因为引用型用"=="判断相等的准则是是否指向同一个对象。
我们一般用compare()方法比较两个数的大小关系如下:
//2.用compare方法比较大小
System.out.println("Integer.compare(5,5)="+Integer.compare(5,3));//前>后返回1
System.out.println("Double.compare(789.321,123.789)="+Double.compare(789.123,123.789));
System.out.println("Boolean.compare(true,true)="+Boolean.compare(true,true));
/*
Integer.compare(5,5)=1
Double.compare(789.321,123.789)=1
Boolean.compare(true,true)=0
*/
在Autoboxing中,我们可以进行运算或者转换
/5.包装类的一些方法
//利用包装类构造器和静态方法实现字符串与Integer的转换
System.out.println("----------------");
String s2="123";
int it1=Integer.parseInt(s2);
int it2=new Integer(s2);
System.out.println("it1="+it1+" it2="+it2);
String s3="563.236";
float ft1=Float.parseFloat(s3);
float ft2=new Float(s3);
System.out.println("ft1="+ft1+" ft2="+ft2);
/*
----------------
it1=123 it2=123
ft1=563.236 ft2=563.236
*/
//6.基本类型转换为字符串
System.out.println("----------------");
String s4=String.valueOf(123.456f);
System.out.println("s4="+s4);
String s5=String.valueOf(636.56);
System.out.println(s5);
String s6=String.valueOf(true);
System.out.println(s6);
/*
----------------
s4=123.456
636.56
true
----------------
*/
//7.包装类型的运算
int i99=10;
Integer i9=789;
Double d9=i9+789.652;//自动拆箱
System.out.println(d9);
Short s9=123;
Double d10=(double)i9+(double)s9;//不进行转换的话会提示并非Double型,不能通过编译
System.out.println(d10);
总结:
在许多情况下包装与解包装是由编译器自行完成的,给编码者带了很多便利性。
作者:YangGan
出处:http://blog.csdn.net/incyanggan
本文基于署名
2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).
分享到:
相关推荐
Java面向对象(高级)-- 包装类(wrapper)的使用
@ vue / web-component-wrapper 包装并将Vue组件注册为自定义元素。兼容性。 不支持IE11及以下版本。...用法dist/vue-wc-wrapper.js :此文件为ES模块格式。 这是捆绑程序的默认导出,可以在带有<script type="mo
Java项目jar包做成windows等系统自启动服务工具:wrapper-windows-x86-64-3.5.14
mybatis-plus-sample-reduce-springmvc: 简化掉默认mapper类示例(Spring MVC版本) mybatis-plus-sample-generator: 代码生成器示例 mybatis-plus-sample-crud: 完整 CRUD 示例 mybatis-plus-sample-wrapper: 条件...
离线安装包,亲测可用
astyle-java-wrapper 真正简单的AStyle java包装器。
用于java-service-wrapper的Puppet模块 Java服务包装程序使Java应用程序可以作为Windows服务或UNIX守护程序运行。 这个模块允许人们使用jsw库来守护她的Java服务。基本用法这个例子是基于logstash的 java_service_...
该项目使您可以轻松访问存储在Steem区块链中的数据。... compile ' com.github.marvin-we.steem-java-api-wrapper:steemj-core:0.4.x-SNAPSHOT ' } 玛文 档案: pom.xml < id>jitpack.io <
eos.java.rpc.wrapper-1.0-SNAPSHOT.jar配合https://blog.csdn.net/liu1765686161/article/details/82180070文章
去CSDN下载所谓破解出现以下错误:wrapper | Licensed to (null) for (null) wrapper | wrapper | Launching a JVM... jvm 1 | WrapperManager: Initializing... jvm 1 | WrapperJNI Error: Not licensed to use ...
这个包装器方便了。 它不提供任何授权机制,因此必须使用另一个软件包。 我使用 (感谢出色的工作人员!)。npm i --save react-native-google-drive-api-wrapperreact-native link react-native-fs是我的代码所依赖...
NG React模块包装器 轻松将独立的React模块集成到Angular应用程序中 目录 快速开始 安装@nicecactus/ng-react-module-wrapper : 使用 : npm install -S @nicecactus/ng-react-module-wrapper 含: yarn add @...
jar项目打包windows服务开机运行,亲测可用,支持windows32bit和64bit,无异常,自动生成日志
打包程序 通过简单的Java“ SProcService”接口使PostgreSQL存储过程(SProcs)可用的库,包括自动对象序列化和反序列化(使用typemapper和Convention-over-configuration)。 支持水平数据库分片(分区/访问逻辑...
Java包装器对象检测器TF 通过将各种android类替换为本机java类,将Android Tensorflow对象检测器移植到Java。 与Android版本相比,主要的变化是android位图类已转换为BufferedImage类,并且android RectF类也已...
情景:从项目中拿到一个客户的demo工程,或者导入一个别人的工程,编译时出现 Error:No such property: GradleVersion for class: JetGradlePlugin: 原因:这是gradle的版本太高导致的 解决办法: 第一步:打开...
JAVA面向对象程序设计试题与解析库 给出许多题目, 而且有答案和讲解。 可以作为毕业生找工作的参考学习资料
nodejs-wrapper-opsworks 在 AWS OpsWorks 上安装 Node 0.12.0 的 redguide/nodejs 包装器用法要将这些与 OpsWorks 结合使用,请执行以下操作: 将此食谱添加到您的食谱存储库在 Berksfile 中添加 redguide/nodejs ...
Java Service Wrapper可以将java程序做成windows服务,逼格满满
.p2{text-indent:1.5em;text-align:justify;margin-left:1em;font-size:14px;letter-spacing:1.5px;word-wrap:break-word; } .p3{color:#09F;font-size:14px;letter-spacing:1.5px;text-decoration:underline;...