包装类

Java是面向对象的编程语言,包装类的出现更好的体现这一思想。

其次,包装类作为类是有属性有方法的,功能比基本数据类型要强大。

八种基本数据类型的包装类
  byte ——Byte
  short ——Short
  int ——Integer
  long——Long
  float——Float
  double——Double 
  char——Character
  boolean——Boolean

装箱与拆箱

装箱是指由基本数据类型向对应的包装类型转换。例如,int包装成Integer类的对象。 
拆箱是指有包装类转换成基本数据类型。例如,把Integer类的对象简化成int。

 
【基本数据类型变成对象包装类的好处】
  可以将基本数据和字符串之间进行互相的转换。
  如:int类型的取值范围是多少? 
       这就应该去查  Integer —— Integer.MAX_VALUE ; 
  基本数据类型包装类的主要作用: 进行基本数据类型和字符串之间的转换                                                                             
 
【基本类型数据转为字符串的三种方式】
1.  基本数据类型对象包装类中的方法 static String toString(基本类型);

2.  String类中的方法: static String valueOf(基本类型)

3.  基本类型数据 +“ ”;

 
重点要掌握的就是:
  字符串---->基本类型数据。
  返回值类型——>基本类型 ;参数——>字符串。
  基本数据类型  变量名 = 基本数据类型包装类.parseXxx(XxxString);
 
  Long  l = Long.parseLong("4546545646546");
  System.out.println(Integer.parseInt("23") + 1);
  在八个基本类型对象包装类中只有一个对象没有parse方法,就是Character.
 
【类型转换错误】
  NumberFormatException——数字格式异常——我碰到了,因为我多加了一个空格。
 
【Integer中要掌握的方法】涉及到一个进制转换的问题。
十进制-->其他进制。
二进制:static String toBinaryString(int);
16进制:static String toHexString(int);
八进制:static String toOctalString(int);
其他进制——>转成十进制;
Integer.toString(6 , 2); 将6转换为二进制。
parseInt(intString , radix);
System.out.println(Integer.parseInt("110") , 2);

【基本数据类型值  和 基本类型数据对象之间的转换】
使用构造函数——Integer();
即可以接受基本数值,也可以接收基本数值的字符串形式。
可以使用基本类型对象中的方法。 static Integer valueOf(int);
 
基本类型的对象和基本数据类型数值】
   int intValue();
如:
    Integer i = new Integer(34);
    int num = i.intValue( );
    System.out.println(num);
 
【如果两数被封装成了对象该如何比较呢?】
基本数据类型的比较——用比较运算符; 引用数据类型使用compareTo进行比较。
  int  compareTo( Integer anotherInteger ) 在数字上比较两个Integer对象。
  在数值上比较两个Integer对象。以0 正数 负数 比较两个数的大小。
Integer a = new Integer(7);
Integer b = new Integer(5);
System.out.println(a.compareTo(b));
【重点】
对象想要进行比较,必须通过方法来完成,这个方法就是compareTo。
而很多对象都可以进行比较。所以这个方法定义在Comparable接口中。
想要对象具备比较功能,只要实现Comparable接口。
 
【基本数据类型对象包装类JDk1.5以后的新特性】——【自动拆箱,装箱】简化书写。
Integer i = new Integer(5);
基本数据类型对象包装类,对象创建的简化写法Integer i = 5;
1. Integer i = 5;(其实在内存中也是通过 new Integer(5)这种方式创建的!)
这种方式成为——自动装箱,Integer.valueOf(5)自动完成了对象创建的动作。
2. 在进行 i = i + 5,运算时——
= 右边的i 会先转成基本数据值(自动拆箱)i.intValue(),其实质为:
i = i.intValue() + 5 ;然后再和5进行加法运算。
= 右边运算完的结果,再次被自动装箱变成Integer对象赋给i.
一旦简化就有弊端:多具备一个值null. 使用自动装箱拆箱时,要进行null的健壮性判断。
【实例】
Integer x = null;
x = x.intValue() + 4;    x为null 不能调用方法,此时会发生:NullPointerException异常。
Boolean b = true; boolean b = true;的区别
答:前者:类类型变量指向一个对象,true为一个对象;
        后者:true为基本类型变量。
在JdK1.5的新特性自动装箱中,如果数值在byte类型范围内(-128 ~ 127)。如果该对象数值重复出现
多个引用其实是指向同一个Integer对象,节省空间!但是超出了byte范围,都会生产新的Integer对象。
Integer m = 127;
Integer n = 127;
System.out.println( m == n); //true
System.out.println(m.equals(n));  //true
Object x = 5;Object x 接受到了一个Integer对象,自动装箱。
然而 Object不可以接受基本数据类型。
 
【基本类型优于包装类型,注意合理使用包装类型】

  说明:Java有两种类型,基本类型(Primitive type)和引用类型(Reference type)。基本类型如boolean,int, double,引用类型如String,List。每一种基本类型都有其对应的包装类型(Wrapper classes),如对应int的是Integer。

  很多情况下基本类型优于装箱基本类型,因为:

  1、在JDK 1.5以及之后的版本中增加了自动装箱和拆箱的特性。但是,不恰当的并行使用基本类型和包装类型,可能带来大量隐含的装箱和拆箱的操作。如下面的for语句中,由于循环变量是基本类型,而sum是包装类型,会导致频繁的自动装箱和拆箱操作,导致性能下降。

Long sum = 0L; 
for (long i=0; i<Integer.MAX_VALUE; i++){
  sum += i;
}
System.out.println(sum);

  2、对于包装类型,使用“==”比较可能无法得到预期的结果。如:new Integer(42) ==new Integer(42) 将返回false。应该使用equals方法做装箱类型的比较。

  使用包装类型合理的场景有:

1、作为集合中的元素、键和值

2、泛型,必须使用包装类型,如List<Integer>

3、进行反射的方法调用时

【面试题】——"34 9 -7 67 25"要求对这个字符串中的数值进行从小到大的排序,生成一个数值有序的字符串。
【思路】
1. 把其中的数拿出来,——对字符串进行切割。
2. 对数进行排序
3. 再追加成字符串。
步骤:
  1.字符串>>>字符串数组(split
       2.定义一个int数组,将字符串数组>>>int数组(Integer.parseInt()
       3.对int数组排序;

4. 将int数组转成字符串数组。

【代码】

package testjava;

import java.util.Arrays;

public class WrapperTest {

    private static final String SPACE = " ";

    /**
* @param args
*/
public static void main(String[] args) { /*
* 综合练习: "34 9 -7 12 67 25"要求对这个字符串中的数值进行从小到大的排序, 然后生成一个数值有序的字符串。
*
* 思路: 1,看到排序,就想要到了数组 2,那数组中的元素怎么获取呢?数值都在字符串中。 3,先从字符串中获取到这些具体的数值。怎么获取呢?
* 4,发现这个字符串居然有规律。数值之间都是由空格隔开的。 可以对字符串进行切割。
* 5,将获取的数据存储到数组中并排序,在将数组转成字符就可以了。哦了。
*
*
* 步骤: 1,将字符串切割成字符串数组。split。 2,定义一个int数组将字符串数组中的元素转成整数存储到int数组中。
* 3,对int数组排序。 4,将int数组排序后转成一个字符串。
*/ String str = "34 9 -7 12 67 25"; str = sortStringNumber(str);
System.out.println(str);
} public static String sortStringNumber(String str) { // 1,将字符串中的数值通过指定的规则进行切割获取字符串数组。
String[] str_nums = toStringArray(str); // 2,将字符串数组转成int数组。
int[] nums = toIntArray(str_nums); // 3,对int数组排序;
sortIntArray(nums); // 4,将int数组变成字符串。
return arrayToString(nums);
} /*
* 将int数组变成字符串。
*/
private static String arrayToString(int[] nums) {
// 1,创建字符串缓冲区。
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
if (i != nums.length - 1)
sb.append(nums[i] + SPACE);
else
sb.append(nums[i]);
} return sb.toString();
} /*
* 对int数组排序。
*/
private static void sortIntArray(int[] nums) {
Arrays.sort(nums);
} /*
* 将字符串数组转成int数组。
*/
private static int[] toIntArray(String[] str_nums) {
// 1,先定义一个int数组。
int[] arr = new int[str_nums.length]; // 2,对字符串数组进行遍历。
for (int i = 0; i < str_nums.length; i++) {
// 将数组格式的字符串转成整数。存储到arr数组中。
arr[i] = Integer.parseInt(str_nums[i]);
} return arr;
} /*
* 将字符串转成字符串数组。
*/
private static String[] toStringArray(String str) { return str.split(SPACE);
} }
 
 

Java SE-基本数据类型对应包装类的更多相关文章

  1. Java中基本数据类型和包装类

    参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...

  2. Java基础(34):Java中基本数据类型的包装类(主要为了不同数据类型之间更方便的进行转换)(Wrapper类)

    相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简单...,为了让基本数 ...

  3. java中基本数据类型、包装类及字符串之间的相互转换

    基本数据类型:不支持面向对象的编程机制(没有属性和方法),即不支持面向对象,之所以提供8中基本数据类型,是为了方便常规数据的处理. 包装类:通过包装类可以将基本数据类型的值包装为引用数据类型的对象,使 ...

  4. Java SE核心之一:常用类,包装类,其他基本数据类型包装类。

    在Java继承体系中,java.lang.Object类位于顶端(是所有对象的直接或间接父类).如果一个类没有写extends关键字声明其父类,则该类默认继承java.lang.Object类.Obj ...

  5. Java探秘之基本数据类型和包装类(int,Integer)(一)

    最近闲来无聊打算做一个博客网,没事记记笔记什么,可是网站不好做,需要点时间,就先写写笔记来练练手. 可是要写什么呢,太难的好像我也写不出来,万一写错了误导别人就不好了. 哈哈,不多说,直奔主题,要是写 ...

  6. Java面向对象 String 基本数据类型对象包装类

      Java面向对象  String 知识概要:              (1)String的用法详解 (2)基本数据类型对象包装类 String          顾名思义,该类主要是对字符串 ...

  7. Java的基本数据类型大小及其包装类

     Java的基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义 ...

  8. JAVA学习第三十二课(经常使用对象API)- 基本数据类型对象包装类

    将基本数据类型(8种:int..)封装成对象的优点就是能够在对象中封装很多其它的功能和方法来操控该数据 常见的操作就是:用于基本数据类型与字符串之间的转换 基本数据类型对象包装类一般用于基本类型和字符 ...

  9. Java基本数据类型、包装类与String类之间的转换

    一.基本数据类型与包装类之间的转换: import org.junit.Test; public class MainTest { /** * 基本数据类型与包装类之间的转换 */ @Test pub ...

随机推荐

  1. git 场景 :从一个分支cherry-pick多个commit

    场景: 在branch1开发,进行多个提交,这是切换到branch2,想把之前branch1分支提交的commit都[复制]过来,怎么办? 首先切换到branch1分支,然后查看提交历史记录,也可以用 ...

  2. tensorflow定义神经网络损失函数MSE

    import numpy as np import tensorflow as tf y_pred = np.array([[1], [2], [3]],dtype=np.float32) y_rea ...

  3. 通过yum升级gcc/g++至版本4.8.2

    最近在坐一个日期处理的问题,需要安装sxtwl模块,但是gcc版本4.7死活也安装不上,最后测试到只能升级gcc版本到4.8才得以解决 [root@123 bin]# gcc -vUsing buil ...

  4. 序列化 ,hashlib ,configparser ,logging ,collections模块

    # 实例化 归一化 初始化 序列化 # 列表 元组 字符串# 字符串# .......得到一个字符串的结果 过程就叫序列化# 字典 / 列表 / 数字 /对象 -序列化->字符串# 为什么要序列 ...

  5. ORM 框架简介

    对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应 ...

  6. SQL Server数据库定时备份解决方案

    SQL Server数据库定时备份解决方案 1.本方案采用软件为:SQLBackupAndFTP 10.0.3 版本,压缩包自带注册机,请自行破解. 2.软件截图如下: 3.功能说明:自动定时备份相关 ...

  7. centos7修改ssh默认登陆端口号

    参考网站; https://blog.csdn.net/ausboyue/article/details/53691953 第一步:修改SSH配置文件(注意是sshd_config而不是ssh_con ...

  8. node 把前台传来的base64码转成图片存放

    最近做个人网站头像修改用到了,在做头像修改,先做了一个图片切割,只需要上传你选中部分, 如图 这种需求 应该还是会遇到的, http://pan.baidu.com/s/1boVkn1t 这是裁剪图片 ...

  9. Activity服务类-2 EngineService服务类

    一共提供了9个接口 //获取RepositoryServiceRepositoryService getRepositoryService();//获取RuntimeServiceRuntimeSer ...

  10. jdk升级到9,eclipse打不开

    jdk从1.8到1.9之后删除了不少之前Deprecated的类. eclipse 版本oxygen和neon对应jdk1.8 eclipse 版本luna和mars对应jdk1.7,1.6 在打开e ...