linkin大话面向对象--包装类
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大话面向对象--包装类的更多相关文章
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- linkin大话面向对象--闭包和回调
先来理解2个概念:闭包和回调 什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...
- linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract default null synchronized ...
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- linkin大话面向对象--GC和jar包
GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...
- linkin大话面向对象--内部类
内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...
- linkin大话面向对象--枚举
枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...
- linkin大话面向对象--初始化块
java使用构造器来对单个对象进行初始化操作,使用构造器先完成整个java对象的状态初始化,然后将java对象返回给程序,从而让整个java对象的信息更加完整.与构造器作用非常类似的是初始化块,它也可 ...
- linkin大话面向对象--组合
继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...
随机推荐
- CSS(一) 引入方式 选择器 权重
Css(一) Cascading Style Sheet 层叠样式表 css注释方式/* */ 一.Css引入方式 1. 行间样式 style=" key:value; " &l ...
- 《精通Linux C编程》1.3Linux系统的常用命令-笔记
[toc] 1.3.1了解Shell Linux常用命令的运行环境就是Shell,它是一种命令解析器,在用户和操作系统之间提供了一个交互接口. 用户在命令行输入命令,然后Shell对该命令进行解析并将 ...
- better-scroll不能滚动之 滚动监听-左右联动
滚动监听 better-scroll 无法滚动的分析,直接翻到最后,看问题汇总,希望能帮助你解决. 借用一下人家这个好看的项目图片,做一个解释.左边的内容会跟右边的内容一起关联,点击左边的菜单,右边会 ...
- Flask基础
简介 Flask是当下流行的Web框架,它是用Python实现的.Flask显著的特点是:它是一个“微”框架.”微”意味着Flask旨在保持核心的简单,但同时又易于扩展.默认情况下,Flask 不包含 ...
- 工作整理: python报表系统常见错误整理
1.一般收不到邮件是因为配置文件邮箱写错 2.如果报表数据不对,看数据插入的时候是否再次写入产生冲突 3.如果收不到报表某些组别的excel查看组别名称是否匹配正确,是否匹配成功,不成功无法发送
- 高通平台的bootloader过程【转】
====================基本知识=======================LK是(L)ittle (K)ernel的缩写.高通平台android普遍采用LK作为其bootloade ...
- Mistakes in Hello World
今天在cmd中用Python写第一行代码"Hello World"出现错误. 写好的源码"HelloWorld.py"存放于" F:\learning ...
- H5中的web worker示例demo分析
web worker 是运行在后台的 JavaScript,不会影响页面的性能. 什么是 Web Worker? 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成. web w ...
- Activiti 5.22.0 之自由驳回任务实现(亲测)
上篇博文,我们完成一个任务SKIP的实现,说好要给各位看官带来驳回实现的现在,就奉上具体实现和讲解.(其实我感觉我的注释写的已经非常清楚了,哈哈) 依旧是,先说我们的需求和思路. PS: ...
- 枚举 输入流重载>> C++
语言:C++ 我们可能会遇到这种情况:自己定义了一个枚举类型,但是却不知道如何重载输入流,使我们定义的枚举用起来不是很方便. 那么,如何去重载呢,我们先来看一下内置类型的测试过程: #include& ...