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大话面向对象--组合
继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...
随机推荐
- centos 虚拟机桥接
/etc/sysconfig/network-scripts/ifcfg-eth0 配置文件 vi ifcfg-eth0 DEVICE=eth0HWADDR=00:0C:29:B8:B5:65TYPE ...
- 垃圾回收(GC) 的基本算法
GC 作为一个长久的话题,从诞生[1]至今也算是经历了六七十年了,对于很多习惯于使用 Java/Python 的同学来说,对于内存的管理可能会稍微更陌生一些,因为这些语言在语言层面就屏蔽了内存的分配和 ...
- [].slice.call(arguments,1)
[转] 前言 今天偶然翻资料看到一个叫做软绑定的函数,用来确定this的; 原代码 if(!Function.prototype.softBind){ Function.prototype.softB ...
- 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】
CSGO Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- POJ1635:Subway tree systems
链接:http://poj.org/problem?id=1635 填坑树同构 题目给出的是除根外的括号序列表示. 其实只要跟你说hash大家都能写得出来…… hash函数取个效果别太差的就行了吧 # ...
- 【转载】Java 内存分配全面浅析
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java.这类文章网上有很多,但大多比较零碎.本文从认知过程角度出发,将带给读者一个系统的介绍. 本文转载自袭烽大神的博客,原文链接 ...
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2372 Solved: 1750[Submit][Sta ...
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在 ...
- 2017 ECJTU ACM程序设计竞赛 矩阵快速幂+二分
矩阵 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission ...
- .26-浅析webpack源码之事件流make(1)
compilation事件流中,依然只是针对细节步骤做事件流注入,代码流程如图: // apply => this-compilation // apply => compilation ...