`
incyanggan
  • 浏览: 34042 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类

 
阅读更多

什么是包装类?


在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。



  • 包装类对应关系



  • 包装类均位于java.lang包







  • 包装类的用途

      • 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)的使用

    总结,包装类在Java中扮演着重要角色,它们使得基本数据类型能够适应面向对象的环境,提供了更丰富的功能,同时也优化了性能。理解和熟练使用包装类及其转换方法,对于编写高质量的Java代码至关重要。

    wrapper-windows-x86-64-3.5.14-windows系统服务打包,64位可用

    标题中的"wrapper-windows-x86-64-3.5.14-windows系统服务打包,64位可用"指的是一个特定版本的Java可执行包装器(Wrapper),它用于将Java应用程序转换为Windows服务,以便在操作系统启动时自动运行。这里的"3.5.14...

    jar包做成系统服务工具:wrapper-windows-x86-64-3.5.14

    "wrapper-windows-x86-64-3.5.14"是TNT4J-Wrapper项目的一个版本,它提供了一种简便的方法,将Java应用程序包装成Windows或其他操作系统下的服务。该工具支持32位和64位环境,本文以64位版本为例,其核心是通过一个...

    vue-web-component-wrapper:将Vue组件包装为Web组件自定义元素

    @ vue / web-component-wrapper 包装并将Vue组件注册为自定义元素。兼容性。 不支持IE11及以下版本。...用法dist/vue-wc-wrapper.js :此文件为ES模块格式。 这是捆绑程序的默认导出,可以在带有<script type="mo

    Java学习资料-包装类

    在Java编程语言中,包装类(Wrapper Classes)扮演着至关重要的角色,它们是Java为每种基本数据类型提供的一种对象表示形式。这些包装类使得基本数据类型能够参与到面向对象的编程中,如方法参数传递、集合操作等。...

    wrapper-linux-x86-64-3.5.55 社区版

    本篇将深入探讨"wrapper-linux-x86-64-3.5.55 社区版"这个软件包,它主要用于在Linux环境下运行Java应用程序。Wrapper技术是将Java程序封装到一个可执行的系统服务或守护进程中,使其能够更方便地管理、监控和自动化...

    arm-2014.05-29-arm-none-linux-gnueabi

    COLLECT_LTO_WRAPPER=d:/eclipse/cross/arm-2014.05-29/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper.exe Target: arm-none-linux-gnueabi Configured with: /scratch/maciej/arm-linux-2014.05-...

    Java Service Wrapper x86-32-3.5.9

    在压缩包`wrapper-windows-x86-32-3.5.9`中,通常会包含以下组件: 1. `wrapper.exe`:这是主执行文件,用于启动和管理Java服务。 2. `wrapper.dll`:这是与`wrapper.exe`一起工作的动态链接库,实现与Java应用程序...

    Java Service Wrapper使用说明

    - `wrapper.java.classpath`:设定类路径。 - `wrapper.java.library.path`:指明Wrapper库文件位置。 - `wrapper.java.mainclass`:指定主类。 - `wrapper.app.parameter`:传递给应用的参数。 - `wrapper.nt...

    Java学习笔记接口包装类

    在Java编程语言中,接口(Interface)和包装类(Wrapper Class)是两个核心概念,它们在实际开发中扮演着至关重要的角色。接口提供了一种定义规范的方式,而包装类则是基本数据类型与对象世界之间的桥梁。现在让我们...

    MyBatis-Plus 的官方示例(mybatis-plus-samples-master.zip)

    mybatis-plus-sample-reduce-springmvc: 简化掉默认mapper类示例(Spring MVC版本) mybatis-plus-sample-generator: 代码生成器示例 mybatis-plus-sample-crud: 完整 CRUD 示例 mybatis-plus-sample-wrapper: 条件...

    JAVA面向对象程序设计试题与解析库

    综上所述,Java AWT包中的Font类、包的使用、Button类以及Graphics类是Java面向对象程序设计中非常重要的概念。掌握这些基础知识对于开发者来说至关重要,可以帮助他们更高效地编写出高质量的Java应用程序。

    astyle-java-wrapper:真正简单的AStyle Java包装器

    为了解决这个问题,我们引入了"Astyle-java-wrapper",一个真正简单的AStyle Java包装器,它使得AStyle在Java环境中的集成和使用变得更为便捷。 "Astyle-java-wrapper"的核心目标是将AStyle的强大功能封装进一个...

    wrapper-windows-x86-64-3.5.15.zip

    "wrapper-windows-x86-64-3.5.15.zip" 文件是一个针对Windows操作系统64位架构的封装程序,版本为3.5.15。在IT领域,"Wrapper"通常指的是一个软件组件,它允许应用程序或者服务在不同的环境中运行,或者提供额外的...

    java原始数据类型的包装类

    为了使原始类型能够参与面向对象的编程,Java设计了八种对应的包装类(Wrapper Classes):Byte、Short、Integer、Long、Float、Double、Character和Boolean。这些包装类将原始类型封装成对象,使得我们可以使用对象...

    java-sproc-wrapper:Java存储过程包装器:从Java调用PostgreSQL存储过程

    打包程序 通过简单的Java“ SProcService”接口使PostgreSQL存储过程(SProcs)可用的库,包括自动对象序列化和反序列化(使用typemapper和Convention-over-configuration)。 支持水平数据库分片(分区/访问逻辑...

    Java Service Wrapper使用总结

    Java Service Wrapper 使用总结 Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper ...

    SpringBoot 使用Java Service Wrapper 部署Windows服务

    - `wrapper.java.mainclass`:设置为`org.tanukisoftware.wrapper.WrapperSimpleApp`。 - `wrapper.java.classpath`:添加你的SpringBoot应用的jar文件路径。 - `wrapper.java.additional.*`:设置Java启动参数,...

    Error:No such property: GradleVersion for class: JetGradlePlugin

    情景:从项目中拿到一个客户的demo工程,或者导入一个别人的工程,编译时出现 Error:No such property: GradleVersion for class: JetGradlePlugin: 原因:这是gradle的版本太高导致的 解决办法: 第一步:打开...

    java-wkhtmltopdf-wrapper:wkhtmltopdf的Java包装器

    Java WkHtmlToPdf包装器 命令行工具的基于Java的包装器。 顾名思义,它使用WebKit将HTML文档转换为PDF。要求必须已安装并且可以在您的系统上工作。包装项目依赖确保已将Java Wrapper依赖项添加到项目中。 如果您使用...

Global site tag (gtag.js) - Google Analytics