对象包装器、自动装箱与拆箱   2016/11/30  晚
 
特点
      1.所有的基本类型都有一个包装器类与之对应。[Integer,Boolean,Long,Character,Short,Float,Double,Void,Byte]
public abstract class Number implements java.io.Serializable {
public final class Float extends Number implements Comparable<Float> {
      2.对象包装器类是final的,意味着:
                                      ①不能定义他们的子类。
                                      ②一旦构造了包装器,就不允许修改包装在其中的值.//如何理解其深意?内部不可变,外部装拆
                                            Eg1. public static void  triple(Integer x){  //won't work 
                                                    。。。   
                                                 }    //Integer x做形参,在函数体内是无法修改其值的。
                                            Eg2. public static void  triple(int x){  //will work 
                                                    x =  x+1;   
                                                  }    //对应的基本类型int x做形参,在函数体内是无法修改其值的。
      3.利用包装器的类特性为基本类型使用泛型。泛型<>的尖括号内的类型参数,不允许是基本类型。【泛型只允许类类型】
        Eg.我们要定义一个整型数组列表。而尖括号内的参数是不允许是基本类型,
           即:不允许写成ArrayList<int>.      解决办法:ArrayList<Integer>
原理:
      1.装箱:把基本类型用它们相应的引用类型包装起来,使其具有类对象的性质。
              Eg.Integer x = 100;                  
              自动装箱[声明并创建int x,将x的值放入Integer类中]  (编译器调用的是static Integer valueOf(int i))
                                                    
      2.拆箱:和装箱相反,将引用类型的对象简化成值类型的数据。
              Eg.int     y = new Integer(100);    自动拆箱
      Eg. Integer n=3;
           n++;   // [n拆箱;自增;n装箱]   注意与作形参的包装器区别。         
==与.equals(Object obj)
      ==与.equals(Object obj):
          A.java的==有两种作用:【用于比较对象的存储区域或比较基本类型的数值】
                    ①用于比较两对象是否指向同一存储区域.       【比较对象的存储区域】 
                    ②用于比较两对象包装器对象:[具体分情况:]
                                a.比较两包装器的值:满足自动规范对象要求:int,short∈[-128,127];boolean,byte,char≤127     【比较基本类型】                     
                                b.不满足a条件时,执行①.
                          Eg3.Integer a = 1000; 
                              Integer b = 1000;
                              (a == b)           //result:fasle; 【比较对象的存储区域】 
                                                                  必须双方均为包装类对象,才以对象方式进行比较
                          Eg4.Integer a =100;
                              Integer b =100;
                              (a==b)             //result:true;  【比较基本类型】 
                          Eg5.Integer a = 100;
                              int b = 100; 
                              (a==b)             //result:true;  【比较基本类型】 
                          Eg6.int a = 1000;
                              Integer b = 1000; 
                              (a==b)             //result:true;  【比较基本类型】一旦有一方为基本类型,就以基本类型数值比较            B..equals(Object obj)仅用于单纯地进行比较两对象的内容,而非存储区域!
        
       综上,在比较两对象的内容时,建议使用equals()方法。
        
常用方法:
        .equals()  
        .toString()
        .praseX()   //字符串与基本类型值的转化的常用方法
        .compareTo()
        .XValue()
        .valueOf()  //自动装箱时也会调用。
测试试题

public class Main{
public static void main(String []args){
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));//String equals已重写,比较内容 Integer int1 = 127;
Integer int2 = 127;
System.out.println(int1==int2);
System.out.println(int1.equals(int2));//Integer equals已重写,比较内容 Character ch1 = 128;
Character ch2 = 128;
System.out.println(ch1==ch2);
System.out.println(ch1.equals(ch2));//Character equals已重写,比较内容 A a1 = new A();
A a2 = new A();
System.out.println(a1.equals(a2));//equals未重写,比较内存地址
a2 = a1;
System.out.println(a1.equals(a2));//equals未重写,比较内存地址
}
} class A extends Object{
public String a; public void setA(){
this.a = a;
} public String getA(){
return this.a;
}
} //output
false
true true
true false
true false
true

总结

  1.定义:拆箱、装箱
  2.二者效率:包装类的效率远远低于基本类型。因为:每new一个对象需要消耗更多内存,装箱操作会创建对象,频繁的装箱操作会消耗许多内存,影响性能,所以可以避免装箱的时候应该尽量避免。
  3.==与equals(Obj)的区别

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

   如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

  诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

<引用出处:https://www.cnblogs.com/dolphin0520/p/3592500.html>

Java SE之装箱与拆箱【基本数据类型的包装类/==与equals方法】的更多相关文章

  1. Java知识点梳理——装箱和拆箱

    1.前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法:Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换 ...

  2. 深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  3. 从别人那淘的知识 深入剖析Java中的装箱和拆箱

    (转载的海子的博文   海子:http://www.cnblogs.com/dolphin0520/) 深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来 ...

  4. 第六节:详细讲解Java中的装箱与拆箱及其字符串

    前言 大家好,给大家带来详细讲解Java中的装箱与拆箱及其字符串的概述,希望你们喜欢 装箱与拆箱 封装类有:Byte , short , Integer , Character , long , Fl ...

  5. [ 转载 ]学习笔记-深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  6. 【转】深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  7. (转)深入剖析Java中的装箱和拆箱

    转:https://www.cnblogs.com/dolphin0520/p/3780005.html 深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就 ...

  8. java基础(七)-----深入剖析Java中的装箱和拆箱

    本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...

  9. java语法糖3 深入剖析Java中的装箱和拆箱

    装箱 在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10); 而在从Java SE5开始就提供了自动装箱的特性, ...

随机推荐

  1. node 和npm 版本更新

    node 版本更新 由于公司要用NG-ZORRO,于是我就跑到官网先看看demo,怎么构建项目,执行的过程中发现了问题 问题描述 执行官网构建项目命令 安装脚手架工具# $ npm install - ...

  2. jmeter 创建web测试计划

    测试用例: 1 创建5个用户发送请求到2个web页面: 2 发送3次请求 总请求=5*2*3=30 创建这个测试计划需要用到以下元素:thread groups / http request / ht ...

  3. 学习记录特别篇之sql,类的继承

    思路: 应用场景: 1.将父类当做一个基础类 大家都去继承该方法,以便少些代码 2.继承父类的方法 同时可以重写该方法时候调用父类原先的方法 实现一石二鸟的效果 即 既增加原先的功能 又新增新的功能 ...

  4. Spring的编程式事务和声明式事务

    事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性. Spring事务管理的两种方式 spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务使用Transa ...

  5. MT【23】用算术几何不等式证明数列极限存在

    评:如果不需要精确到3,上界的求法可以利用$$(1+\frac{1}{n})^n*\frac{1}{2}*\frac{1}{2}<(\frac{n+\frac{1}{n}*n+\frac{1}{ ...

  6. BUPT2017 wintertraining(15) #1 题解

    拖了一周才完成的题解,抛出一个可爱的表情 (っ'-')╮ =͟͟͞͞❤️.对我来说E.F比较难,都是线段树的题,有点久没写了. A - Infinite Sequence CodeForces - 6 ...

  7. 洛谷 P1613 跑路 解题报告

    P1613 跑路 题目描述 小\(A\)的工作不仅繁琐,更有苛刻的规定,要求小\(A\)每天早上在\(6:00\)之前到达公司,否则这个月工资清零.可是小\(A\)偏偏又有赖床的坏毛病.于是为了保住自 ...

  8. 洛谷 P2467 地精部落 解题报告

    P2467 [SDOI2010]地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为\(N\)的山脉\(H\)可分为从左到右的\(N ...

  9. wechat 网页版通信全过程

    想要记录总结一下自己在这个小项目中所遇到的坑,以及解决问题的思路. 首先我觉得这个小项目挺有实际市场的,市场上有一定的需求量,这个就是驱动力吧.这个小项目的关键点是wechat网页版通信全过程,讲真挺 ...

  10. DataFrame 数据去重

    df.head() >>> Price Seqno Symbol time 0 1623.0 0.0 APPL 1473411962 1 1623.0 0.0 APPL 147341 ...