Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢?

基本数据类型

包装类

byte

Byte

short

Short

int

Integer

long

Long

char

Character

float

Float

double

Double

boolean

Boolean

除了Integer和Character定义的名称和对应的基本类型差异大,其他六种都是将首字母大写就可以了。

Integer,Byte,Float,Double,Short,Long都是Number类的子类。Character和Boolean都是Object直接子类。8个类都是final修饰的(不可被继承)。



基本数据类型 → 包装类:通过对应包装类的构造方法实现。除了Character外,其他包装类都可以传入一个字符串参数构建包装类对象。

包装类 → 基本数据类型:包装类的实例方法xxxValue();    // xxx表示包装类对应的基本数据类型。例如:

Integer i = new Integer(3);
int i2 = i.intValue();
  • jdk1.5开始出现的特性:

自动装箱:可把一个基本类型变量直接赋给对应的包装类对象或则Object对象

自动拆箱:允许把 包装类对象直接赋给对应的基本数据类型。例如:

Integer i = 3;//装箱
int i2 = i;//拆箱

String → 基本类型,除了Character外所有的包装类提供parseXxx(String s)静态方法,用于把一个特定的字符串转换成基本类型变量;

基本类型 → String,String 类有静态方法valueOf(),用于将基本类型的变量转换成String类型。其实这种不怎么常用的,至少我从来不这么写,将基本类型变量和""进行连接运算,系统会自动将基本类型变量转换成字符串。例如:

String str = "LinkinPark";
int i = Integer.parseInt(str);//String --> 基本类型
String s1 = String.valueOf(i);//基本类型 --> String
String s2 = i+"";



包装类使用的还是挺多的,在写javabean的时候,实体里面的属性定义最好都定义成包装类,因为这样子可以明确的区分是这些属性作为基本数据类型的默认值和null值。要是使用基本数据类型,在做实体的模糊查找的时候经常遇见问题的。举个例子:我现在要对Person类的int类型的sex属性做模糊查找,其中0表示男,1表示女,查询时这个属性可能有,可能没有,要是基本类型的话,没有的话也是默认值0,表示男的话也是0,那么这样子问题就出现了。但是要是使用包装类来定义属性的话,就不会出现这个问题,没有就是null,有的话就是其他的属性。。。

  • 最后来了解一下应用在包装类上面的一个设计模式:享元模式

享元模式是一直简单的设计模式,是指对于很多个小的对象,它们有很多的相同点,就可以把它们看做是同一个对象,对于那些不同的地方可以做为方法的参数进行导入,对于相同的地方可以作为它的内部属性,这样就大大减少了对象的数量。如Integer类型的对象就使用了享元模式设计。说白了,个人就是单例差不多的,对象存在的话就用,不存在的话就new一个出来,然后放在缓存池中,方便以后来抓。看下面代码:

package linkin;

/**
*
* @version 1L
* @author LinkinPark
* @since 2014-12-15
* @motto 梦似烟花心似水,同学少年不言情
* @desc ^包装类中的享元模式(其实字符串池也是这个意思)
* 这里需要注意的是:这个享元模式只是用来拆包和装包的是才会共享一个数据,要是我们自己new一个对象的出来的话,地址肯定是不同的。
*/
public class Linkin
{
/*
*
*/
public static void main(String[] args)
{
Integer a1 = 12;
Integer a2 = 12;
System.out.println(a1 == a2);//true Integer a11 = Integer.valueOf(12);
Integer a22 = Integer.valueOf(12);
System.out.println(a11 == a22);//true Integer a111 = new Integer(12);
Integer a222 = new Integer(12);
System.out.println(a111 == a222);//false //下面数字太大,超过了Integer的范围
Integer a3 = 129;
Integer a4 = 129;
System.out.println(a3 == a4);//false String str1 = "LinkinPark...";
String str2 = "LinkinPark...";
System.out.println(str1 == str2);//true
}
}

linkin大话面向对象--包装类的更多相关文章

  1. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  2. linkin大话面向对象--闭包和回调

      先来理解2个概念:闭包和回调   什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...

  3. linkin大话面向对象--java关键字

    java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract  default  null  synchronized ...

  4. linkin大话面向对象--多态

    java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...

  5. linkin大话面向对象--GC和jar包

    GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...

  6. linkin大话面向对象--内部类

    内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...

  7. linkin大话面向对象--枚举

    枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...

  8. linkin大话面向对象--初始化块

    java使用构造器来对单个对象进行初始化操作,使用构造器先完成整个java对象的状态初始化,然后将java对象返回给程序,从而让整个java对象的信息更加完整.与构造器作用非常类似的是初始化块,它也可 ...

  9. linkin大话面向对象--组合

    继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...

随机推荐

  1. Jerry的ABAP, Java和JavaScript乱炖

    写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...

  2. 使用筛选器特性标记方法解决webapi 跨域问题

    在我的之前随笔 解决api.WebService跨域问题 中有人问到可以用特性来解决跨域问题吗,答案是肯定的,可以的:操作如下: 首先建一个类CrossSiteAttribute:从抽象 Action ...

  3. 做了一个web版的 MyBatis Generator

    mybatis 官方提供了 MyBatis Generator ,可以通过 xml 配置文件的方式使用,例如自己写调用脚本,或者使用 mvn 插件的方式,其实实现起来还是很简单的.虽然简单,但还是不够 ...

  4. CAD 二次开发 -- 自动加载开发的DLL

    CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...

  5. Gulp开发教程(翻译)

    Building With Gulp =================== 原文地址 翻译出处 原创翻译,有不当的地方欢迎指出.转载请指明出处.谢谢! 对网站资源进行优化,并使用不同浏览器测试并不是 ...

  6. Qt 共享库(动态链接库)和静态链接库的创建及调用

    前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...

  7. angular2 路由

    路由是个模块,命令行生成:ng generate module routerTest; 自己组建: 路由模块说明: Routes:路由配置,路由配置文件类型.比如:const routing:Rout ...

  8. 4层板的pcb创建

    四层板的制作可以在原先的二层板上增加层,(软件为AD17)方法如下: 一.单击Design->Layer Stack Manager菜单(快捷键为DK),将弹出以下的界面: 二,选择上图中的Ad ...

  9. 用.net中的SqlBulkCopy类批量复制数据 (转载)

    在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...

  10. 浅谈event.client、event.screen与event.offset

    每每看到event.client.event.screen与event.offset这几个,头都大了,今天又碰到了,特来总结下. 1.event.screenX与event.screenY. 首先,e ...