专栏首页LanceToBigDataJavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别

JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别

一、包装类

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,

在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

  1.1、包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示:

  Primitive-Type     Wrapper-Class         byte                  Byte         short                 Short         int                     Integer         long                  Long         float                  Float         double                   Double         boolean                 Boolean         char                                Character

  注意:在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可

  1.2、包装类的位置

包装类型都是java.lang下的类,所以在使用的时候不需要导入包。

  1.3、每种包装类中都定义属性和方法供其对象使用

    这是从基本类型变为包装类型最明显的区别,现在指向的是对象了,可以访问对象中的属性和调用对象中的方法了,之前只是一个简单的数值,没有任何属性和方法。         例如:             //使用变量i不能访问任何属性和访问             //因为变量i没有指向对象,也不能指向对象             int i = 1;             //查看API可知Integer类中的构造器如果使用             //使用变量i可以访问Integer类中定义的属性和方法             //因为变量i指向的是对象,这是一个引用类型的变量             Integer i = new Integer(1);             或者             Integer i = new Integer("1");             注:包装类中的属性和方法大都是静态的,可以使用类名直接访问。(也有非静态的方法,就需要使用对象调用了)         例如:             main:

                System.out.println(Integer.MAX_VALUE);
                System.out.println(Integer.MIN_VALUE);
                System.out.println(Integer.toBinaryString(100));

  1.4、常用的方法

    简单的使用:

  1.5、包装类的作用

    1)作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

               2)包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

  1.6、JDK1.5增加了自动拆箱装箱的功能(低版本JDK中编译报错)

    注:针对八种基本类型及其包装类型,这里以int和Integer为例           //自动装箱,把字面值1包装成Integer类型对象           Integer i1 = 1;           //自动拆箱,把Integer对象转变为一个简单的int类型值           int i2 = new Integer(1);           注:               //编译通过               Integer a = 1;               //编译报错               //1可以自动装箱为Integer类型对象               //但是Integer和Long没有任何关系               Long b = 1;               //因为int是32位 long是64位               int --可以自动转换为--> long               //因为Integer和Long没有子父类关系               Integer --不能转换为--> Long

二、基本类型和字符串之间的转换 

  在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。

  2.1、基本类型转换为字符串有三种方法:

    1) 使用包装类的 toString() 方法

    2) 使用String类的 valueOf() 方法

    3.)用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串

  2.2、将字符串转换成基本类型有两种方法:

    1) 调用包装类的 parseXxx 静态方法

    2.)调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱

三、==和equals方法的区别

   这俩个都是对俩个变量做比较的。       1)基本类型变量的比较           基本类型变量指向的不是对象,不能调用方法,所以只能使用==进行比较,并且比较的是基本类型变量的简单数值是否相等。       2)引用类型变量的比较           引用类型变量指向的是对象,所以既可以使用==进行比较,也可以使用equals进行比较          区别在于:               equals是Object中的方法,每个对象都可以调用和其他对象比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。              ==是java中的基本的操作符,是不能重写的,俩个引用使用==进行比较,那么比较的是引用所指向的内存地址值是否相同。

四、toString方法hashCode方法 

toString和hashCode都是Object类中的方法,所以每个对象都可以直接调用。  hashCode方法,返回该对象的哈希码值,Object中的实现一般是通过将该对象的内存地址转换成一个整数。 toString方法,返回该对象的字符串表示。         其形式为:             类的全限定名@hashCode方法返回值的十六进制形式             即:             o.getClass().getName() + "@" + Integer.toHexString(o.hashCode())     例如:

        public class Student{
 
        }
        main:
            Student s = new Student();
            String str1 = s.toString();
            String str2 = s.getClass().getName()+"@"+Integer.toHexString(s.hashCode());
            System.out.println(str1);
            System.out.println(str2);

        输出结果:             com.briup.ch06.Student@6084fa6a             com.briup.ch06.Student@6084fa6a     注:我们可以把最后的那个六十进制数字认为是这个对象的内存地址,但是其实并不是真的地址值,而是这个对象的哈希码值,这个哈希码值默认又是通过对象地址值转换过来的一个数字。(如果我们重写了hashCode方法,那这个返回的哈希码值就真的和对象内存地址没有一点关系了)     例如:

        Student s = new Student();
        //打印引用时,默认调用其所指向对象的toString方法
        System.out.println(s);
        System.out.println(s.toString());
 

        注:有些时候还是会有一点区别

        Student s = null;
        //打印null
        System.out.println(s);
        //运行报错,空指针异常
        System.out.println(s.toString());

 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 内核级虚拟化技术

    这篇可能讲的有一点点的无聊,因为基本上是概念性的东西,我也是理解了很久才慢慢的搞懂的。 一、虚拟化与虚拟化技术   1.1、虚拟化的定义   虚拟化主要指的是特...

    用户1195962
  • struts2(一)之初识struts2

    前言   我们都知道struts2是一个框架,那什么是框架呢?很多人其实不太明白,其实框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们...

    用户1195962
  • linux(十一)之初始化文件

    前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作。 要么现在懒惰,未来讨饭。要么现在努力,未来惬意。 一、初始化...

    用户1195962
  • C++中的临时对象

    C++中临时对象(Temporary Object)又称无名对象。临时对象主要出现在如下场景。

    Dabelv
  • Integer类型比较的问题

    工作几年了,居然还是出现这个问题,最近做websocket通信,其中在SystemWebSocketHandler类中的一个代码片段,判断条件如下: /** ...

    小柒2012
  • 有向图----有向环检测和拓扑排序

    SuperHeroes
  • 【2019年8月】OCP 071认证考试最新版本的考试原题-第19题

    The INVOICE table has a QTY_SOLD column of data type NUMBER and an INVOTCE_DATE ...

    用户5892232
  • 【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗

    冷冷
  • 招聘面试程序员的一些心得

    最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经。公司里一下子面试的任务多了起来。正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,...

    用户1410343
  • 如何像黑客军团主角那样将文件隐藏在音频中

    这些年来黑客军团(Mr. Robot)一直是我最喜欢的电视剧,演员Rami Malek所扮演的有社交焦虑症,游离于肤浅而物质的社会之边缘却又想让世界更美好的年轻...

    FB客服

扫码关注云+社区

领取腾讯云代金券