今天项目中碰到一个parseLong()方法,传入的是一个String类型,得到一个Long,一开始感觉不就是类型转换嘛,后来发现还是有点小坑的。

首先parseLong(String str)它还会去调用一个更深的parseLong(String str, int radix),如果不传入的话,radix默认为10 ,那么这个方法究竟怎么工作的呢?

简单来说,就是将str按照radix的进制来转换,比如默认是10的话,那么parseLong("99", 10)得到的结果就是99 。既然如此,是不是觉得没啥大不了的,那么parseLong("99",8)会得到什么呢?直接将99转换成8进制应该得到143吧,那么就错咯,它会报错NumberFormatException,那么来读一下源码

if (len > 0) {

char firstChar = s.charAt(0);

if (firstChar < '0') { // Possible leading "+" or "-"

if (firstChar == '-') {

negative = true;

limit = Long.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;

}

}

大概能发现,它是按照从第一位开始,每一位都不能超过这个radix。

java parselong_java中的parseLong()相关推荐

  1. java中string范围_java中long parseLong(String s)方法中string(十进制数字)的范围?

    java中long parseLong(String s)方法中string(十进制数字)的范围? 來源:互聯網  2009-06-19 05:05:28  評論 分類: 電腦/網絡 >> ...

  2. JAVA语言异常,Java语言中的异常

    1.异常分类 从产生源头来看,Java语言中的异常可以分为两类: JVM抛出的异常.比如:访问null引用会引发NullPointerException:0作为除数,如9/0,JVM会抛出Arithm ...

  3. 统计java文件中的代码行数

    统计Java代码行数工具类  --  CodeCounterUtil.java 统计指定目录下的java文件中代码行数  --  public static int  getCodeNumFromFo ...

  4. Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

    什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...

  5. Java 8中一些常用的全新的函数式接口

    这一篇属于菜鸟级博客,只是介绍了一些在Java 8中新出现的一些很有用的接口,通过一些简单的例子加以说明,没有深入地阐述. 函数式接口 什么是函数式接口? 函数式接口,@FunctionalInter ...

  6. 你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:Mr.ml https://blog.csdn.net/Ma ...

  7. 聊一聊Java 泛型中的通配符 T,E,K,V,?

    点击上方"方志朋",选择"设为星标" 回复"1024"获取独家整理的学习资料 作者:glmapper juejin.im/post/5d57 ...

  8. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

最新文章

  1. 私房库视频学习笔记-小清新BBS系统开发技术归纳
  2. php分区表,分区表的基本操作
  3. praying,blessing,wishing
  4. 5.3linux下C语言socket网络编程简例
  5. php curl cookie 读写
  6. BlockChain:区块链入门课程 -- 区块链应用于能源 POWER LEDGER案例
  7. vscode remote免密登录
  8. 多臂老虎机导论(一)引言
  9. FRR的ATOMIC 利用GCC的实现
  10. 分值展示时,只显示评委分数,但不显示评委名称或评委编号等标识,如何进行前期准备操作?
  11. mac安装mysql devel_Mac安装Mysql
  12. prince2 成功的项目管理_我的PRINCE2故事
  13. python的jira库操作
  14. np和tensor转换
  15. 鸿蒙系统学习笔记(一) 鸿蒙系统介绍
  16. Excel自定义格式参数
  17. mysql 5.7的my.ini的位置在隐藏文件夹“ProgramData”下面
  18. C语言编码转换----负数的二进制表示方法
  19. 自动提取论文公式方法
  20. use ida6.8 + windbg on win10

热门文章

  1. 图漾DM430/FM810深度摄像头在ROS环境下的配置过程
  2. Open3D 点云最小二乘法拟合二次曲面
  3. 为啥谷歌浏览器打不开微信公众平台?
  4. 【Git】远程仓库代码覆盖本地仓库代码,解决push上库冲突的问题
  5. 百度云Dulife平台首发Boom Band智能手环
  6. Vue.js阿拉伯数字转化成人民币的中文
  7. 扫地机器人石头爬坡_请问扫地机器人,石头,小米哪个好?
  8. linux读取hdd_temp硬盘温度
  9. 从零开始构建Linux
  10. 基站天线效率相关技术研究