精华内容
下载资源
问答
  • Java中包装类作用及注意点

    万次阅读 多人点赞 2018-03-16 19:30:50
    Java中对每种基本类型都有一个对应的包装类,这里主要讲解包装类作用包装类使用时的一些注意点。 包装类作用 作用主要有以下两方面: - 编码过程中只接收对象的情况,比如List中只能存入对象,不能存入...

    Java中对每种基本类型都有一个对应的包装类,这里主要讲解包装类的作用和包装类使用时的一些注意点。

    包装类的作用

    作用主要有以下两方面:
    - 编码过程中只接收对象的情况,比如List中只能存入对象,不能存入基本数据类型;比如一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类;
    - 方便类型之间的转换,比如String和int之间的转换可以通过int的包装类Integer来实现,具体如下。
    int a = new Integer("123");
    或者
    int a = Integer.parseInt("123");

    包装类使用时的注意点

    这里先看一段代码:

    public class StudyBox {
        public static void main(String[] args) {
    
            Integer a = 100, b = 100, c = 150, d = 150;
            Long e = 150l;
            System.out.println(a == b);
            System.out.println(c == d);
            System.out.println(c.equals(d));
            System.out.println(d.equals(e));
            System.out.println(e.equals(d));
        }
    
    }
    

    这段代码的输出结果如下:

    true
    false
    true
    false
    false

    第一个、第三个输出很好理解,但是其他三个输出可能就会让人有些疑惑。

    代码解释

    这里以int型对应的包装类Integer为例来说明:
    在上段代码中,初始化Integer类型的a,是将int型数据100装箱然后赋值给变量a,其中装箱操作使用的是静态工厂方法valueOf(int i),下面我们看一下这个方法的源码:

    /**
     * Returns an {@code Integer} instance representing the specified
     * {@code int} value.  If a new {@code Integer} instance is not
     * required, this method should generally be used in preference to
     * the constructor {@link #Integer(int)}, as this method is likely
     * to yield significantly better space and time performance by
     * caching frequently requested values.
     *
     * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     *
     * @param  i an {@code int} value.
     * @return an {@code Integer} instance representing {@code i}.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

    在这个方法注释的第二段中,说明了这个方法一定会缓存-128到127的值,也有可能会缓存这个范围以外的值,这就是上面代码中第二个输出是false的原因。即-128到127的值会被Integer类缓存起来(在Integer类中通过IntegerCache类来实现),从valueOf(int i)的代码中可以看出,对象a和b是同一个对象,所以==比较是true;而c和d是不同的对象,所以==比较是false。

    另外,使用equals()来进行对象比较时,Integer会先检查类型是否一致,若不一致直接返回false,这也就是第四个和第五个输出false的原因。具体如以下源码:

    public boolean equals(Object obj) {
         if (obj instanceof Integer) {
              return value == ((Integer)obj).intValue();
          }
          return false;
    }
    总结

    以上内容若有错误之处,还请各位大神指点,不胜感激,同时也欢迎各位一起来探讨相关问题。

    参考资料

    解决Java包装类比较时遇到的问题

    展开全文
  • JAVA中包装类作用

    万次阅读 多人点赞 2019-04-16 12:04:37
    包装类(Wrapper Class): Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本...

    一、什么是包装类

    包装类(Wrapper Class): Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

    二、包装类的用途

    为了使用方便Java中将8中基本数据类型进行了封装:除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。

    boolean —> Boolean
    char —> Character
    byte—> Byte
    short—> Short
    long—> Long
    int —> Integer
    float—> Float
    double—> Double
    对于包装类说,用途主要包含两种:
    a、作为 和基本数据类型对应的类 类型存在,方便涉及到对象的操作。
    b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

    三、包装类的实际使用(以int和integer为例)

    1.int和integer类之间的转换
    在实际转换时,使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换:

            int n=5;
            Integer n1=new Integer(n);
            System.out.println("int类型转换为integer类:"+n1);
            //
            Integer i=new Integer(50);
            int i1 = i.intValue();
            System.out.println("integer类转换为int类型:"+i1);
    

    2、Integer类内部的常用方法
    Integer类的主要方法有:parseInt方法和toString方法。

        //parseInt方法: 数字字符串类型转成int类型
            String ss="123";
            int ii = Integer.parseInt(ss);
            System.out.println("字符类型转成整型:"+ii);
            //toString方法:int类型转成数字字符串类型
            int ii2=123;
            String ss2 = Integer.toString(ii2);
            System.out.println("int类型转成数字字符串类型:"+ss);
    

    JDK自从1.5版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。
    自动装箱:将 基本数据类型 封装为对象类型,来符合java的面向对象的思想。
    自动拆箱:将对象重新转化为基本数据类型。

      //5是基本数据类型,通过自动装箱变成对象类型。
            //编译器执行了Integer iii = Integer.valueOf(5)
            Integer iii=5;
            //自动拆箱,实际上执行了 int iii2 = iii.intValue()
            int iii2=iii;
            System.out.println(iii2);
    

    valueOf()源码分析:

    public static Integer valueOf(int i) {
         assert IntegerCache.high>= 127;
         if (i >= IntegerCache.low&& i <= IntegerCache.high)
         return IntegerCache.cache[i+ (-IntegerCache.low)];
         return new Integer(i); 
    }
    

    说明:Integer iii=5;相当于编译器执行了Integer iii = Integer.valueOf(5)操作。这个方法就是返回一个 Integer 对象,只是在返回之前,看作了一个判断,判断当前 i 的值是否在 [-128,127] 区别,且 IntegerCache 中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新的对象。
    3.包装类的缓存值
    各个包装类缓存值范围

    boolean:true和false 
    byte:-128~127 
    char:0~127 
    short:-128~127 
    int:-128~127 
    long:-128~127 
    

    特别注意:对于float和double没有缓存。
    在对上述值进行装箱的时候(如:Character c1=127;or Integer i= Integer.valueOf(1); 这个不行哦:Integer i2=new Integer(1);因为这是新建了一个对象出来。),并不是创建一个新对象而是使用缓存中的对象,如果超出范围则需要新建立对象。
    四、常见的面试题

    1.Java中Int与Integer的区别?

    一、int 是基本类型,直接存数值;而integer引用数据类型。
    二、Int的声明不需要实例化,且变量声明后的初始值为0;Integer的是一个类,初始值为null,需要进行实例化,才能对变量数据进行处理。
    三、Integer类是int的包装类,实际开发中Integer被看成一个对象,可以进行数据转换等操作。
    

    2.判断下面程序片段输出的结果:

            Integer num1 = 200;   
            Integer num2 = 200;           
            System.out.println("num1==num2: "+(num1==num2));                    
            Integer num3 = 100;   
            Integer num4 = 100;   
            System.out.println("num3==num4: "+(num3==num4)); 
    

    输出结果:num1num2:false 和num3num4:true
    说明:

    首先要明确equal方法与==的区别:

    1. List item equals() 比较的是**两个对象的值(内容)**是否相同。
    2. List item “==” 比较的是**两个对象的引用(内存地址)**是否相同,也用来比较两个基本数据类型的变量值是否相等。

    java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;

    感恩作者,写的非常好
    作者:谁是谁的小确幸 来源:CSDN
    原文:https://blog.csdn.net/qq_29119581/article/details/78327759
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 包装类作用

    2020-12-10 15:30:12
    包装类作用是为了方便对基本数据类型进行操作. 包装类型有: Integer, Short, Byte, Long, Float, Double, Character, Boolean, BigInteger, BigDecmail 基本类型和引用类型的区别有以下几点: 基本类型不是对象...

    包装类的作用是为了方便对基本数据类型进行操作.

    包装类型有:

    Integer, Short, Byte, Long,
    Float, Double, 
    Character,
    Boolean,
    BigInteger, BigDecmail
    

    基本类型和引用类型的区别有以下几点:

    • 基本类型不是对象,而引用类型是对象.
    • 声明方式:基本数据类型直接声明,引用数据类型需要用new关键字创建.
    • 存储的位置:基本数据类型存储在堆栈中,引用类型则通过引用指向实例,具体的实例保存在堆中.
    • 基本数据类型的初始值依据其类型而定,引用数据类型初始值为null.

    包装类型的作用:
    包装类是为了方便对基本数据类型进行操作,包装类可以解决一些基本类型解决不了的问题:

    • 集合只能存放引用类型的数据, 不能存放基本数据类型.如add(Object o);
    • 基本类型和包装类型之间可以互相转换,自动装箱拆箱.
    • 包装类的parse方法可以实现基本数据类型+string类型之间的相互转换
    • 函数需要传递进去的参数为Object类型,传入基本数据类型就不可行.
    public void test(Object o){}
    
    test(new Integer(2));
    

    本文出处:https://www.cnblogs.com/Linteresting/p/10714901.html

    展开全文
  • Java包装类(Integer 详解 )

    千次阅读 2020-04-23 11:15:17
    Java包装类(Integer详解)

    Java包装类

    基本概述


    • 在某些场合要求所有的数据内容都必须是类类型的对象,而Java语言中有8种基本数据类型声明的变量都不是对象,为了使得这些数据在该场合种能够使用,则需要好进行对象化处理,此时就需要借助包装类将变量包装成对象再进行使用

    • 包装类是为了值类型数据和对象间能互相转换、提供装箱和拆箱机制的类

    基本数据类型包装类型
    byteByte
    BooleanBoolean
    shortShort
    charCharacter
    intInteger
    longLong
    floatFloat
    doubleDouble

    自动拆箱与装箱

    • 自动拆箱: 自动进行包装类基本数据类型的转换
    • 自动装箱: 自动进行基本数据类型包装类的转换

    Integer类型


    • java.lang.Integer 类是Object类的间接子类,用于包装int类型的数据
    • 该类由final关键字修饰,表示该类不能被继承
    • 常用方法
      • 该类重写了Object类的equals()、hashCode()以及toString()方法
      • Integer(int value) - 根据参数指定的整数值来构造对象
      • Integer(String s) - 根据参数指定的字符串来构造对象
      • int intValue() - 用于获取调用对象种含有的int类型数据并返回
        • 用于实现将Integer类型拆包为int类型(自动拆箱)
      • static Integer valueOf(int i) - 根据参数指定的整数来得到对象
        • 用于实现将int类型包装成Integer类型(自动装箱)
      • static int parseInt(String s) - 用于将字符转类型的数据转换为int类型的整数
    • 案例
    /*
     * 若尘
     */
    package packing;
    
    /**
     * 演示Integer类的使用
     * @author ruochen
     * @version 1.0
     */
    public class TestInteger {
    	public static void main(String[] args) {
    		// 使用Integer类中的构造方法来构造对象,该类没有无参构造方法
    		
    		Integer it = new Integer(123);
    		// 自动调用toString()方法, 得到字符串类型的十进制整数
    		System.out.println(it);
    		
    		Integer it2 = new Integer("234");
    		System.out.println(it2);
    		System.out.println("----------------------");
    		
    		// 实现int类型和Integer类型之间的相互转换
    		Integer it3 = Integer.valueOf(222);
    		System.out.println(it3);  // String 类型
    		
    		int res = it3.intValue();
    		System.out.println(res);  // int 类型
    
    		System.out.println("----------------------");
    		// 实现String类型向int类型的转换
    		int res2 = Integer.parseInt("33333");
    		System.out.println(res2);
    		
    		// java.lang.NumberFormatException
    		// 要求字符串中每个字符都是十进制整数的字符,否则产生数字格式异常
    		// int res3 = Integer.parseInt("1234a");
    		// System.out.println(res3);
    		
    		System.out.println("----------------------");
    		// 自动装箱和自动拆箱的机制
    		Integer it4 = 100;  // int -> Integer 发生自动装箱,自动调用ValueOf()
    		res = it4;  // Integer -> int  发生自动拆箱,自动调用intValue()
    		
    		
    		System.out.println("----------------------");
    		Integer it5 = 128;
    		Integer it6 = 128;
    		Integer it7 = new Integer(128);
    		Integer it8 = new Integer(128);
    		
    		System.out.println(it5.equals(it6));  // true 比较内容
    		System.out.println(it5 == it6);  // false 比较地址
    		System.out.println(it7.equals(it8));  // true 比较内容
    		System.out.println(it7 == it8);  // false 比较地址
    		
    		
    		System.out.println("----------------------");
    		// 源码993行
    		// 耗时
    		// -128~127 提前装箱完毕
    		// 此处127已经提前装箱,不需要重新创建对象,两个指向同一个对象
    		// 上面128不在范围内,需要创建对象
    		Integer it9 = 127;
    		Integer it10 = 127;
    		// 下面是自己手动new的两个对象,地址不同
    		Integer it11 = new Integer(128);
    		Integer it12 = new Integer(128);
    		
    		System.out.println(it9.equals(it10));  // true 比较内容
    		System.out.println(it9 == it10);  // false 比较地址
    		System.out.println(it11.equals(it12));  // true 比较内容
    		System.out.println(it11 == it12);  // false 比较地址
    	}
    }
    
    
    123
    234
    ----------------------
    222
    222
    ----------------------
    33333
    ----------------------
    ----------------------
    true
    false
    true
    false
    ----------------------
    true
    true
    true
    false
    

    自动装箱池(-128~127)

    • 为了提高性能在Integer类的内部提供了自动装箱池,也就是把-128 ~ 127 之间的整数提前装箱完毕,若程序中需要该范围内的数据则直接从装箱池中获取,无需创建新对象
    展开全文
  • Java包装类(Wrapper)作用详解

    千次阅读 2019-08-14 16:47:39
    第一,基本数据类型之间的相互转换不是都可以制动转换的,而你强制转换又会出问题,比如String类型的转换为int类型的,那么jdk为了方便用户就提供了相应的包装类。 例子: public class Integer{ private int i; ...
  • 八大基本数据类型均有对应的包装类 byte、short、int、long、float、double、char、boolean分别对应Byte、Short、Integer、Long、Float、Double、Character、Boolean 包装类型的出现是为了方便基本数据类型能够和...
  • 所谓包装类作用就是将原始数据类型转换成引用数据类型,下面这篇文章主要给大家介绍了关于在Java包装类比较时遇到的问题的解决方法,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
  • java基础数据类型包装类作用

    千次阅读 2015-09-11 14:03:45
    在java中,提起int,float,byte这些基础数据类型,自然就会想到他们各自对应的包装类了。那么你有没有想过,java大牛们为什么会设计包装类呢? 首先,Integer等包装类更加体现了面向对象的特点,有人说java不是纯面向...
  • 在Java初学阶段,想必很多人都会先学Java中的一些基本类型以及他们的包装类,如下 int --> Integer long --> Long double --> Double ...等等 很多人在学的时候感觉这用处不大啊,也不知道什么时候用,该...
  • java八种基本数据类型及包装类详解

    万次阅读 多人点赞 2018-12-20 10:14:40
    /*作用:将包装类对象转换为对应的基本数据类型*/ Integer a=Integer.valueOf(100);//将基本数据类型转换为包装类对象 int b=a.intValue();//将包装类对象转换为对应的基本数据类型 System.out.println(b...
  • JAVA的包装类

    千次阅读 2018-01-13 15:56:34
    但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper ...
  • : 1)讲师经过精心的备课,以精简的语言,提炼了Java内置包装类和常用类(Number类、Math类、Character类、String类、StringBuffer类、Date类和SimpleDateFormat类、Calendar类)涉及到的概念、常用方法的作用等...
  • Java 八大包装类(超详细!)

    千次阅读 2021-05-01 16:42:23
    一、8种基本数据类型对应的包装类型名 基本数据类型 包装类型 byte java.lang.Byte(父类Number) short java.lang.Short(父类Number) int java.lang.Integer(父类Number) long java.lang.Long...
  • java中包装类的意义

    千次阅读 2019-02-20 15:40:48
    java中有8个基本类型,他们是以值的形式...包装类是不可变类,在构造了包装类对象后,不允许更改包装类在其中的值。 基本类型 包装类 int Integer char Character long Long double Double short...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    String为什么是不可变的 Date相关 包装类相关 自动装箱与拆箱 int 和 Integer 有什么区别 Integer a= 127 与 Integer b = 127相等吗 常用工具类库 单元测试 日志 Java面试总结汇总,整理了包括Java基础知识,集合...
  • java中包装类作用

    千次阅读 2009-02-04 13:25:00
    二):以List为例,大家都知道一个动态数组的add(Object o)方法只能接受一个引用类型,即一个对象,而怎样把一个数字放到一个动态数组里面...,相信到这里你已经明白了为什么一个值类型会有一个对应的包装类了吧。...
  • 什么是包装类?对基本数据类型进行包装,把基本数据类型包装成一个对象 包装类作用?把基本数据类型变的更强大,以面向对象的思想来去使用这些类型。
  • java包装类型作用,和基本类型区别

    千次阅读 2018-09-18 14:27:00
    Java中的8种基本数据类型都有对应的对象类型,但是既然有了基本数据类型,包装类型有什么作用呢?它们有什么区别呢? 答案是包装类型的出现是为了方便对基本类型进行操作。包装类型可以解决一些基本类型解决不了的...
  • 像int类型的包装类Integar 我觉得int本来就是由很多整数组成的啊,我觉得int就是一个类,干嘛还要Integar这样的包装类
  • 一、java中八种基本数据类型对应的包装类型:  ... 原始类型 包装类 原始类型所占的字节数  short Short 2个字节  int Integer 4个字节  long Long 8个字节  float Float 4个字节  double Do
  • 深入浅出讲解Optional包装类

    千次阅读 2018-12-07 00:50:00
    Optional是JDK8的新特性, 首先这个是被final修饰的...Optional的作用 在写这篇博客之前, 看过好多相关的资料, 大体上来说这个就是用来解决万恶的空指针异常, 用来避免繁琐的 !=null代码而存在的。 那你也太...
  • Java知识体系最强总结(2021版)

    万次阅读 多人点赞 2019-12-18 10:09:56
    ​ 服务安全、数据安全、数据备份 ​ 网络隔离、登录跳板机、非外网分离 ​ 认证、授权 常用API String、StringBuffer、StringBuilder、正则表达式 Number、Radom、Math、System、包装类 Arrays、Collections 日期...
  • JAVA基本数据类型及其对应的包装类

    万次阅读 2018-09-10 17:18:13
    一、JAVA中的八种基本类型 1、数字类型(6种)  ①byte: ... 作用:byte数据类型主要用于在大型数组中节约空间,用来代替整型,因为byte类型只占八位,占用的空间只有int型的1/4; ②short:  占...
  • package com.xiao.parseInt; import org.junit.Test; /** * @author 笑笑 * @Date 2018年4月2日下午9:39:45 * */ public class Parse { //String转byte @Test public void test1(){ ... byt...
  • 大家,别小看了这作用大着累,下边我们将介绍它的相关常用方法 的源码 Character.isLetter()这个方法用来判断,这个字符是否为字母 Character.isDigit()这个方法判断,这个字符是否为数字字符 Character....
  • java 反射中的包装类与基本数据类型

    千次阅读 2018-11-28 13:45:46
    写了个执行反射方法的函数,但是却老出问题,捣鼓了下,原来是基本数据类型出了问题, ...但是因为参数是可变类型,我们要单独下一个执行反射中方法的工具方法的时候,要用数组来处理,就会出现自动装箱问题, 比如我...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 192,043
精华内容 76,817
关键字:

包装类的作用