Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

先来看段代码

public class IntegerDemo {
  public static void main(String[] args) {
    String num = null;
    System.out.println( Integer.parseInt(num));// Exception java.lang.NumberFormatException
    System.out.println( Integer.valueOf(num));// Exception java.lang.NumberFormatException
    System.out.println( String.valueOf(num)); //输出null
    num = "";
    System.out.println( Integer.parseInt(num)); // Exception java.lang.NumberFormatException
    System.out.println( Integer.valueOf(num)); // Exception java.lang.NumberFormatException
    System.out.println( String.valueOf(num));//空串,啥也不输出
  }
}

先看一下 String.valueOf() 里面是怎么写的

String.valueOf() 在遇到 null 和 空串的情况下 ,都能正常输出,所以不抛错

再来看下 包装类型 Integer里面又是如何处理的

这两个方法里面都需要先 parseInt( s,10),就是将字符串s先转成  十进制的 int基本类型,,但是 valueOf()会根据int范围从[-127,127]的内部缓存中去取(用到设计模式中的 享元模式)

一起来看下 parseInt(s, 10),,在方法里面会判断字符串是否是合法的数字,会去校验null, 空串等其他格式,所以会抛错

 public static int parseInt(String s, int radix)
        throws NumberFormatException
  {
    /*
     * WARNING: This method may be invoked early during VM initialization
     * before IntegerCache is initialized. Care must be taken to not use
     * the valueOf method.
     */
    if (s == null) {
      throw new NumberFormatException("null");
    }
    if (radix < Character.MIN_RADIX) {
      throw new NumberFormatException("radix " + radix +
                      " less than Character.MIN_RADIX");
    }
    if (radix > Character.MAX_RADIX) {
      throw new NumberFormatException("radix " + radix +
                      " greater than Character.MAX_RADIX");
    }
    int result = 0;
    boolean negative = false;
    int i = 0, len = s.length();
    int limit = -Integer.MAX_VALUE;
    int multmin;
    int digit;
    if (len > 0) {
      char firstChar = s.charAt(0);
      if (firstChar < '0') { // Possible leading "+" or "-"
        if (firstChar == '-') {
          negative = true;
          limit = Integer.MIN_VALUE;
        } else if (firstChar != '+')
          throw NumberFormatException.forInputString(s);
        if (len == 1) // Cannot have lone "+" or "-"
          throw NumberFormatException.forInputString(s);
        i++;
      }
      multmin = limit / radix;
      while (i < len) {
        // Accumulating negatively avoids surprises near MAX_VALUE
        digit = Character.digit(s.charAt(i++),radix);
        if (digit < 0) {
          throw NumberFormatException.forInputString(s);
        }
        if (result < multmin) {
          throw NumberFormatException.forInputString(s);
        }
        result *= radix;
        if (result < limit + digit) {
          throw NumberFormatException.forInputString(s);
        }
        result -= digit;
      }
    } else {
      throw NumberFormatException.forInputString(s);
    }
    return negative ? result : -result;
  }

总结

以上所述是小编给大家介绍的Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字

  • Java int与integer的对比区别

    Java int与 integer区别: int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1:Integer i= new Integer(1);(要把int

  • 详解Java中int和Integer的区别

    基本数据类型和引用类型 Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下: 原始类型:boolean,char,byte,short,int,long,float,double 包装类型:Boolean,Character,Byte

  • Java中int与integer的区别(基本数据类型与引用数据类型)

    一.先说说int与integer的区别 int 是基本数据类型,默认值为0,不需要进行实例化 integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化. 基本数据类型是可以用"=="进行比较,而引用数据类型则不可以,一般是通过equals方法来实现比较. 二 .再说说基本数据类型与引用数据类型的区别? 特点: 1.从概念方面来说 基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值 2.从内存构建方

  • Java中关于int和Integer的区别详解

    1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者,integer 是后者(也就是一个类). 2.初始化时 复制代码 代码如下: int i = 1; Integer i = new Integer(1);   // (要把integer 当做一个类看) int 是基本数据类型(面向过程留下的痕迹,不过是对Java的有益补充) Integer 是一个类,是int的扩展,定义了很多的转换方法 类似的还有:float Float.double Double.string Stri

  • Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    先来看段代码 public class IntegerDemo { public static void main(String[] args) { String num = null; System.out.println( Integer.parseInt(num));// Exception java.lang.NumberFormatException System.out.println( Integer.valueOf(num));// Exception java.lang.Num

  • Java中Object.equals和String.equals的区别详解

    前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我妈通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态存储区.常量存储区(常量池).其他存储位置. 此处重点介绍堆和常量存储区: 堆:存储new的对象; 常量池:用来存储final static.String的常量. 2.Object.equals与String.equals的区别 Object.equals(==):比较内存地址: String.eq

  • JAVA中Integer值的范围实例代码

    废话不多说了,直接给大家贴代码,具体代码如下所示: package com.test; public class Test { public static void main(String []args) { Integer a = 100;//此处若使用new,则==值必为false Integer b = 100; System.out.println(a==b);//true Integer c = 150; Integer d = 150; System.out.println(c==d

  • 一场由Java中Integer引发的踩坑实战

    看过阿里巴巴开发手册的同学应该都会对Integer临界值127有点印象. 原文中写的是: [强制]所有整型包装类对象之间值的比较,全部使用 equals 方法比较. 说明:对于 Integer var = ? 在-128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache 产生, 会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都 会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法

  • Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringBuffer buffer = newStringBuffer("abcd"); String str = buffer.toString(); 通过String类中的构造将一个StringBuffer类转换为String类:String(StringBuffer buffer) Strin

  • 你知道在Java中Integer和int的这些区别吗?

    一.基本概念(重要) Integer 是 int 的包装类,int 则是 java 的一种基本数据类型: Integer 变量必须实例化后才能使用,而int变量不需要: Integer 实际是对象的引用,当new一个 Integer时,实际上是生成一个指针指向此对象:而 int 则是直接存储数据值: Integer的默认值是null,int的默认值是0. 二.拓展 基于以上的一些概念,这里我们拓展一下,对于Integer包装类型与int基本数据类型之间数值相互比较的结果进行一下说明,这个也可能在

  • Java中Integer类型值相等判断方法

    背景 本周开发中遇到一个很低级的问题,Integer包装类的相等判断,包装类与基本数据类型的区别,应该大多数人在面试中经常被问到,但是有的时候大家都会烦这些看起来没啥用的东西,面试前还需要去熟悉,博主之前也是这样认为的,但是平时看一些理论性的东西,在方案探讨或者可行性分析时是很必要的,废话不多少,看看这个问题吧 事故现场 public static void main(String[] args) { Integer a =127; Integer b = 127; Integer c = 12

  • Java中InputSteam怎么转String

    InputSteam与String相互转化 字符串被广泛应用于 Java 编程中,是程序经常处理的对象.以对象的方式处理字符串,使字符串更加方便灵活.Java 提供了 String 类创建和操作字符串,当我们从文件中读取数据时,常常需要将 InputStream 转换为 String,以便于下一步的处理. 1.使用 InputStreamReader 和 StringBuilder (JDK) public class InputStream2String { public static voi

  • java 中newInstance()方法和new关键字的区别

    java 中newInstance()方法和new关键字的区别 * 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类. * 那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩.可扩展和可重用等软件设计思想. * 我们使用关键字new创建一个类的时候,这个类可以没有被加载.但是使用newInstance()方法的时候, * 就必须保证:1.这个类已经加载:2.这个类已经连接了. * newInstance()实际上是把new这个方式分解为两步,即首先调用Class

  • Java中CyclicBarrier和CountDownLatch的用法与区别

    目录 前言 CountDownLatch 例子 CyclicBarrier 构造函数 例子 两者区别 前言 CyclicBarrier和CountDownLatch这两个工具都是在java.util.concurrent包下,并且平时很多场景都会使用到. 本文将会对两者进行分析,记录他们的用法和区别. CountDownLatch CountDownLatch是一个非常实用的多线程控制工具类,称之为"倒计时器",它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行. Coun

随机推荐