精华内容
下载资源
问答
  • 基本类型只有值,而包装类型则具有与它们不同的同一性(即值相同但不是同一个对象) 包装类型比基本类型多了一个非功能值:null 基本类型通常比包装类型更节省时间空间,速度更快 但有些情况包装类型的使用...
    • 基本类型只有值,而包装类型则具有与它们的值不同的同一性(即值相同但不是同一个对象)
    • 包装类型比基本类型多了一个非功能值:null
    • 基本类型通常比包装类型更节省时间和空间,速度更快
    • 但有些情况包装类型的使用会更合理:
    1. 泛型不支持基本类型,作为集合中的元素、键和值直接使用包装类(否则会发生基本类型的自动装箱消耗性能)。如:只能写 ArrayList<Integer>,不能写 List<int>
    2. 在进行反射方法的调用时

     

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 基本类型和包装类型之间有三个主要区别: •1、基本类型只有值,而两个包装类型可以具有相同值和不同的同一性(值相同,但是==false) •2、基本类型只有功能完备值,而每个包装类型除了它对应基本类型所有...

    基本类型和包装类型之间有三个主要区别:

    •1、基本类型只有值,而两个包装类型可以具有相同的值和不同的同一性(值相同,但是==false)


    •2、基本类型只有功能完备的值,而每个包装类型除了它对应基本类型的所有功能值以外,还有个非功能值:null。


    •3、基本类型通常比包装类型更节省时间和空间。


    案例(一)

    package demo.one;
    
    import java.util.Comparator;
    
    /**
     * 存在问题的实现方式
     * 
     * @author TongWei.Chen
     * @date 2017年3月21日21:08:11
     */
    public class BadDemoOne {
        //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数
        static Comparator<Integer> naturalOrder = new Comparator<Integer>() {
            public int compare(Integer first, Integer second) {
                return first < second ? -1 : (first == second ? 0 : 1);
            }
        };
    
        public static void main(String[] args) {
            System.out.println(naturalOrder.compare(new Integer(66),
                    new Integer(66))); //1
        }
    }
    
    //从结果可以看出,输出的居然是1,而不是0,原因在于first和second两个参数表示同一个int值,但是是不同的Integer实例。所以这个比操作会返回false,对包装类用==去比较几乎总是错的,建议包装类用equals去比较。
    
    (二)解决上述问题
    package demo.one;
    
    import java.util.Comparator;
    
    /**
     * 解决BadDemoOne方式
     * 
     * @author TongWei.Chen
     * @date 2017年3月21日21:08:11
     */
    public class GoodDemoOne {
        //比较器,返回的数值到底是正数负数还是0,取决于他的第一个参数是小于等于还是大于第二个参数
        static Comparator<Integer> naturalOrder = new Comparator<Integer>() {
            public int compare(Integer first, Integer second) {
                int f = first;
                int s = second;
                return f < s ? -1 : (f == s ? 0 : 1);
            }
        };
    
        public static void main(String[] args) {
            System.out.println(naturalOrder.compare(new Integer(66),
                    new Integer(66))); //0
        }
    }
    
    //强制在使用时让他拆箱成基本类型,结果输出正常,返回0。
    
    (三)
    package demo.two;
    
    /**
     * 存在NullPointerException
     * 
     * @author TongWei.Chen
     * @date 2017年3月21日21:26:28
     */
    public class Unbelievable {
    
        //包装类型默认null
        static Integer i;
    
        public static void main(String[] args) {
            if(i == 42) {
                System.out.println("我错了嘛?");
            }
        }
    }
    
    //抛出NullPointerException,因为包装类型默认null
    
    (四)解决上述问题
    package demo.two;
    
    /**
     * 解决NullPointerException
     * 
     * @author TongWei.Chen
     * @date 2017年3月21日21:26:28
     */
    public class Believable {
    
        //int基本类型默认0
        static int i;
    
        public static void main(String[] args) {
            if(i == 42) {
                System.out.println("我错了嘛?");
            }
        }
    }
    
    

    不会抛出任何异常

    包装类型做运算操作比基本类型慢几十倍,参考我的另外一篇文章http://www.jianshu.com/p/54e5fa72d5b5

    问:那么我们什么时候用包装类型呢?
    答:有三个合理的用处
    •1、作为集合中的元素、键和值。
    •2、在参数化类型中,必须使用包装类。
    •3、进行反射的方法调用时,必须使用装箱基本类型。

    总之:当可以选择的时候,基本类型要优于包装类型。基本类型更简洁更快速。

    展开全文
  • 一个实用程序包,用于将不同类型的javascript回调转换为各种promise类型。 您可以将与回调一起使用函数包装为返回承诺并可以与async / await一起使用函数。 如果这样做对您有帮助,请考虑捐款 :handshake: 关于...
  • java类型分两部分,基本类型和引用类型。并且,每个基本类型都对应了一个引用类型,称为装箱基本类型。 如Integer 对应int,Double对应double.   两者主要区别有三: 基本类型只有值,而装箱类型则有与...

    java的类型分两部分,基本类型和引用类型。并且,每个基本类型都对应了一个引用的类型,称为装箱基本类型。

    如Integer 对应int,Double对应的double.

     

    两者的主要区别有三:

    1. 基本类型只有值,而装箱类型则有与他们的值不同的同一性,也就是两个装箱类型可以具有相同的值,有不同的同一性(不同的引用)
    2. 基本类型只有功能完备的值,而每个装箱类型除了它对应基本类型的所有功能值外,还有个非功能的值--null
    3. 基本类型通常比装箱类型更节省时间和空间。

    首先看装箱类型的同一性,自己写的一个比较函数代码如下:

    // 比较器
      public int myCompare(Integer first, Integer second) {
    
             return first < second? -1 : (first==second ? 0 : 1);
    	}

     

    该函数用来表示Integer值的递增数字顺序。若第一个参数是小于,等于 或者大于它的第二个参数,则该方法返回负数,0或者正数.

     

    但是该函数并不能正常的工作,当你调用 myCompare(new Integer(44), new Integer(44)),时,函数返回1.

    但我们期待的是0。

    原因是进行first<second比较时,系统自动对两个Integer对象被进行了自动拆箱,提取了基本类型的值,经过比较44<44不成立,则进行first==second的比较,这时系统进行的是同一性的比较,也就是比较两个包装类的引用,很明显不是同一个引用,所以函数返回1.

    结论:对包装类用==操作符几乎总是错误的.

    修改的方法是 新增加两个局部的值类型变量来替换。

    	public int myCompare(Integer first, Integer second) {
    
    		// 使用两个基本类型来转化,避免进行对象的同一性比较
    	/*	int f = first;
    		int s = second;
    		return f < s ? -1 : (f == s ? 0 : 1);*/
    
    		 return first < second? -1 : (first==second ? 0 : 1);
    	}

     

    再看下面的代码:

    		Integer i1 = 100;  //自动装箱
    		Integer i2 = 100;
    		int j = 100;
    		System.out.println(i1 == i2); 		        
                                    System.out.println(i1 == j); 
    		
                                    Integer i3 = 128; //自动装箱
    		Integer i4 = 128;
    		int k = 128;
    		System.out.println(i3 == i4); 
    		System.out.println(i4 == k); 

     

    以上代码分别输出结果是什么?

    输出的结果是 true,ture,false,true

    对于i1和i2的结果,我们很清楚明白,但是对于i3==i4的比较,为什么为false?

     

    当将一个int值赋值给它的一个Integer包装类型变量时,Integer类型调用了valueOf方法:

        public static Integer valueOf(int i) {
    	final int offset = 128;
    	if (i >= -128 && i <= 127) { // must cache 
    	    return IntegerCache.cache[i + offset];
    	}
            return new Integer(i);

     

    如果这个值在-128和127之间,则将该值进行了缓存处理,在内存中都是指向的一个包装类型对象.

     

    也就是

    Integer i1=100;

    Integer i2=100;

    Integer i3=100;

    Integer i4=100;

    ...

    Integer i100=100;

     

    这些所有的Integer对象都是指向同一个对象地址空间的。

     

    但是超过了这个区间,则分别创建的是不同的Integer对象.

    查看IntegerCache中引用cache这个变量的部分:

    private IntegerCache(){}
    
    	static final Integer cache[] = new Integer[-(-128) + 127 + 1];
    
    	static {
    	    for(int i = 0; i < cache.length; i++)
    		cache[i] = new Integer(i - 128);
    	}

     

    由于cache[]在IntegerCache类中是静态数组,也就是只需要初始化一次,即static{......}部分,所以,如果Integer对象初始化时是-128~127的范围,就不需要再重新定义申请空间,都是同一个对象---在IntegerCache.cache中,这样可以在一定程度上提高效率。

     

    看另外的个例子:

    	static Integer i;
    
    	public void unbelieve() {
    		if (i == 42) { // 这里将抛出空指向异常 因为自动装箱和拆箱的缘故,建议修改i的定义为int 或者和new
    			// Integer(42)包装类型来比较
    			System.out.println("不敢相信");
    		}

     

    这里不会输出"不敢相信",系统会报告NullPointerException异常。因为i被初始化为null,使用(i==42)时,因为i是Integer 类型,当包装类型和基本类型进行比较时,包装类型则会被自动拆箱,但i是一null,null对象引用被自动拆箱,则会得到一个NullPointerException异常。

    修改的方法是将i定义为int或者将其和包装类进行比较,但同样要注意上面提到的-128~127这个区间的问题

     

    另外一个关于性能的问题,看如下代码:

    public static void main(String args[]){
        Long sum=0L;
        for(long i=0;i<Integer.MAX_VALUE;i++){
            sum=+i;       
        }
        System.out.println(sum);
    }

    这个程序中的的局部变量 sum 被声明为装箱类型Long,不是基本类型long,虽然编译和运行没有任何错误。但明显的,其在运行中被反反复复的装箱和拆箱,严重影响了性能。

     

     

     

     

    展开全文
  • Random类和包装

    2020-11-02 15:52:55
    Random类和包装类 Random 构造方法: 方法声明 功能描述 Random() 用于创建一个随机数生成器,每次实例化Random对象都会生成不同的随机数 Random(long seed) 使用一个long类型的seed(种子)创建伪...

    Random类和包装类


    Random 的构造方法:

    方法声明 功能描述
    Random() 用于创建一个随机数生成器,每次实例化Random对象都会生成不同的随机数
    Random(long seed) 使用一个long类型的seed(种子)创建伪随机数生成对象,当seed相同时,每次实例化Random对象会生成相同的随机数

    Random类的常用方法:

    方法声明 功能描述
    boolean nextBoolean() 随机生成Boolean类型的随机数
    double nextDouble() 随机生成double之间的随机数
    float nextFloat() 随机生成float类型的随机数
    int nextInt() 随机生成int类型的随机数
    int nextInt(int n) 随机生成【0,n)之间int类型的随机数
    long nextLong() 随机生成long类型的随机数

    包装类:
    基本类型对应的包装类:

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

    Java中,除了支持基本数据类型与对应包装类之间进行转换外,还提供了其他方法来支持基本数据类型、基本数据包装以及字符串之间的相互转换。具体如下:

    1.通过引用数据类型字符串String 类的valueOf()方法可以将8种基本数据类型转换为对应的字符串类型。

    2.通过8种包装类的静态方法valueOf()既可以将对应的基本数据类型转换为包装类,也可以将变量的内容匹配的字符串转换为对应的包装类(Character包装类除外)。

    3.通过8种包装类的有参构造方法同样既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外)。

    4.通过8种包装类的静态方法parseXxx()可以将变量内容匹配的字符串转换为对应的基本数据类型。

    5.包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值。

    例子:

    package cert;
    public class Ch02 {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int num = 123;
    		//通过String.valueof()方法将基本数据类型转换为字符串
    		String string = String.valueOf(num);
    		System.out.println("将int变量转换为字符串的结果:"+string);
    		//通过包装类的valueof()静态方法将基本类型和字符串转换为包装类
    		String str = "998";
    		Integer integer = Integer.valueOf(num);
    		Integer integer2 = Integer.valueOf(str);
    		System.out.println("将int变量转换为包装类的结果:"+integer);
    		System.out.println("将字符串变量转换为包装类的结果:"+integer2);
    		//通过包装类的有参构造方法将基本类型和字符串类型转换为包装类
    		Integer integer3 = new Integer(num);
    		Integer integer4 = new Integer(str);
    		System.out.println("通过构造器将int变量转换为包装类的结果:"+integer3);
    		System.out.println("通过构造器将字符串变量转换为包装类的结果:"+integer4);
    		//通过包装类parseXxx()静态方法将字符串转换为基本数据类型
    		int parseInt = Integer.parseInt(str);
    		System.out.println("将字符串转换为基本类型的结果:"+parseInt);
    		//通过包装类的toString()方法将包装类转换为字符串
    		String string2 = integer.toString();
    		System.out.println("将包装类转换为字符串类的结果:"+string2);		
    	}
    }
    

    输出结果:
    在这里插入图片描述可以看出这几种方法都可以实现基本数据类型、包装类以及字符串之间的相互转换,但是在使用value(String s)和parseXxx(String s)方法时,还需注意以下几点:

    1. 除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应的基本数据类型的数据,否则虽然编译通过,但运行时会报错。如下:
     Integer i = Integer.valueof("123");   //合法
     Integer i = Integer.valueOf("12a");   //不合法
    

    2.除了Character 外,包装类都有parseXxx(String s)的静态方法,将字符串转换为对应的基本数据类型。参数s不能为null,而且同样必须是可以解析为相应基本数据类型的数据,否则虽然编译通过,但是运行时会报错。示例如下:

       int i = Integer.parseInt("123");    //合法
       Integer in = Integer.parseInt("itcast");   //不合法
    
    展开全文
  • Python语言提供了运算符重载功能,增强了语言灵活性,这一点与C++有点类似又有些不同。鉴于它特殊性,今天就来讨论一下Python运算符重载。 Python语言本身提供了很多魔法方法,它运算符重载就是通过重写这些...
  • 分发和包装类型信息 推迟对注释评估 标准集合中的类型提示泛型 文字类型 字典 最终预选赛 灵活变量注释 补充语法 参数规格变量 显式类型别名 用户定义类型防护 函数返回值,实例变量,类变量全局变量的类型推断 ...
  • 包装

    热门讨论 2020-03-05 22:41:59
    概念:基本数据类型所对应引用数据类型 Object可统一所有数据,包装默认值是null 包装类中实际上就是持有了一个基本类型属性,作为数据存储空间(Byte中有...8种包装类提供不同类型转换方式 Nu...
  • 2.对于相同或相似功能,参数个数或类型不同的函数,可以使用函数重载,对于函数结构及工作一致,而一部分内容(如文本)不同时(即非变量的不同,如果是仅变量不同可以使用模板),可以将不同的这一小部分包装为参数...
  • 在OSX,Linux,Windows上的不同应用程序平台之间使用单个nodegraph 在本机应用程序节点图缺乏功能或限制可定制性的地方对其进行定制扩展 为用户提供一个简单的系统,以使用自定义代码段对其进行扩展 加载...
  • 开发人员站点“上提供了针对不同语言环境选定包装器列表。 包装程序包括帮助程序功能,以执行以下操作: 音乐播客元数据 专辑,艺术家,曲目播放列表 音轨音频功能和音频分析 特定艺术家专辑 特定...
  • 每个对话框都有彩色顶部,图标,标题消息以及自己的功能。 共有6种类型的对话框: 访问内部View对象 从库1.1.0版本开始,您可以通过名称以configure开头方法访问对话框内部View对象。 例如: ...
  • 一切都有严格的类型,因此要充分利用类型检查代码完成功能。 灵活性。 Airgram依赖中间件。 这提供了高度自由度。 您可以修改请求,保存响应,执行数据流中任何操作。 数据模型。 您可以扩展标准TDLib对象...
  • 策略模式是对算法的包装,是把使用算法责任算法本身分割开来,委派给不同的对象管理。常把一个系列算法包装到一系列策略类里面,作为一个抽象策略类子类。 详细介绍参考:...
  • 欢迎使用Codextended-一组扩展,旨在通过为SwiftCodable API提供类型推断支持的功能和便利,使其更易于使用。 它不是包装器,也不是全新框架,而是以非常轻巧方式直接增强了Codable 。 可编码真棒! 没有第三...
  • CCD工业相机类型大观

    2020-12-06 19:43:46
     CCD 是在薄硅晶片上处理一系列不同的功能,在每一个硅晶片上分布几个相同IC等可产生功能的元件,被选择IC从硅晶片上切下包装在载体里用在系统上。总结下来,CCD主要有以下几种类型: 一、面阵CCD:   ...
  • st_asio_wrapper是一组类库,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步(当然这是从boost.asio继承而来)、自动重连,数据透明传输,自动...
  • 工业相机类型简介

    千次阅读 2013-12-05 21:47:06
     CCD 是在薄硅晶片上处理一系列不同的功能,在每一个硅晶片上分布几个相同IC等可产生功能的元件,被选择IC从硅晶片上切下包装在载体里用在系统上。总结下来,CCD 主要有以下几种类型:  1、面阵CCD工
  • 可蓝图FJsonObject包装器,几乎完全支持Json功能不同类型的值,数组,二进制数据内容,两种方式都可以串行化为FString等。 可蓝图FJsonValue包装器-用于蓝图完整Json功能! 提供可绑定事件潜在函数以...
  • 我们经历了一次洗礼,木箱装箱注意事项,1盒子角度漏洞不宜过大,有两种类型的密封盒通常自动包装胶水胶带,与手动“工作”型密封盒不同的是,橡胶密封盒胶带密封盒不会密封盒角。如果箱子角度太大。会削弱...
  • 还有许多其他flutter插件可以包装现有Stripe库,但是此软件包使用了不同的方法。 它不包装现有Stripe库,而是直接访问Stripe API。 颤振支持: iOS 安卓 网页 有关其他简短示例,请参见example / main....
  • 功能测试知识普及 一、测试框架 ...1)打印不同的文件类型 2)单面打、双面打 3)打印不同的纸张大小 4)打印不同的纸张厚度,普通纸张、照片纸 5)不同的单彩色、多色、单黑色 6)打印不同的内容(文
  • pandoc是一个文件类型插件,但是它也可以将自身附加到不同的文件类型,例如pandoc或restructuredText。 用户不限于使用带有markdownpandoc。 Markdown编写器有用自定义映射(部分实现,永久正在进行)。 ...
  • 使用MUSCLE算法从这些序列的不同组合动态生成(组织)比对 按残基类型,保守性或与参考序列相同的颜色 导出这些路线以供其他喜欢的路线查看器使用 当前可用的一些功能: 将序列或比对作为FASTA文件导入 直接从...
  • 而越来越多专业知识 Blog 出现,让我们看到了 Blog 更多所蕴涵巨大信息价值:不同的 Blog 选择不同的内容,收集整理成为很多人关注专业 Blog ——目前越来越多人获取信息来源是一些固定 Blog 。...
  • 只要您其他插件能够跟上,此示例就展示了Build Tools:trade_mark:圣杯-能够构建一次, git checkout different-branch (具有完全不同的文件分支)能力,并具有与您想要输出完全相同的功能期望。...
  • MDN.valueof()方法 ...因此,不同类型对象valueOf()方法返回值返回值类型均可能不同。 注意number、string、boolean中基本包装类型使用。 MDN.tostring方法 默认情况下,toString() 方法被每个 Obje
  • 通知顾问

    2018-05-06 15:11:33
    通知(Advice):是Spring提供一种切面(aspect)。但其功能过于简单:只能将切入面织入到目标类所有目标方法中,无法完成将切面织...顾问将通知包装,会根据不通通知类型,在不同的时间点,将切面织入到不同...
  • 这种类型的设计模式属于结构型模式,它是作为现有一个包装。 这种模式创建了一个装饰类,用来包装原有类,并在保持类方法签名完整性前提下,提供了额外的功能。 我们通过下面实例来演示装饰器模式用法...
  • 这种类型的设计模式属于结构型模式,它是作为现有一个包装。这种模式创建了一个装饰类,用来包装原有类,并在保持类方法签名完整性前提下,提供了额外的功能。我们通过下面实例来演示装饰器模式用法。...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

包装的不同类型和功能