直接数值赋值

众所周知,数值前不加0,所以八进制数的表示要求开头加0,注意不是o或者O。
比如0123,直接赋值,对应的其实是十进制数83。

jshell> int a = 0123;
a ==> 83

来自字符串的转型

但字符串的强制转型则截然不同。
我们的数值串可能以0开头,比如下面的串"0123":

jshell> String b = "0123";
b ==> "0123"

直接转型,发现只是把0消去了而已,还是妥妥的十进制。
理由是:Integer.parseInt()默认十进制。

jshell> int c = Integer.parseInt(b);
c ==> 123

那怎么转八进制呢?显然是加上radix参数的啦,参数值就是8。

jshell> int d = Integer.parseInt(b, 8);
d ==> 83

你以为决定能转成八进制是因为b是"0123"?其实不是,任意数就可以,没必要有先导0的:

jshell> b = "123";
b ==> "123"jshell> int d = Integer.parseInt(b, 8);
d ==> 83

printf()输出八进制

这个部分该使用%0还是%o呢?

先看看%0吧!

jshell> System.out.printf("%0", a);
|  异常错误 java.util.UnknownFormatConversionException:Conversion = '0'
|        at Formatter.checkText (Formatter.java:2732)
|        at Formatter.parse (Formatter.java:2718)
|        at Formatter.format (Formatter.java:2655)
|        at PrintStream.format (PrintStream.java:1053)
|        at PrintStream.printf (PrintStream.java:949)
|        at (#4:1)

明显在扯皮……%0什么鬼啊。。。

所以要用%o,打印出的结果就是八进制的啦!(%d是十进制整数)

jshell> System.out.printf("%o", a);
123$5 ==> java.io.PrintStream@65e2dbf3jshell> System.out.printf("%o", c);
173$6 ==> java.io.PrintStream@65e2dbf3jshell> System.out.printf("%d", a);
83$7 ==> java.io.PrintStream@65e2dbf3

大O行吗?

jshell> System.out.printf("%O", c);
|  异常错误 java.util.UnknownFormatConversionException:Conversion = 'O'
|        at Formatter$FormatSpecifier.conversion (Formatter.java:2839)
|        at Formatter$FormatSpecifier.<init> (Formatter.java:2865)
|        at Formatter.parse (Formatter.java:2713)
|        at Formatter.format (Formatter.java:2655)
|        at PrintStream.format (PrintStream.java:1053)
|        at PrintStream.printf (PrintStream.java:949)
|        at (#7:1)

显然不行啊!

八进制回转String

注意前面已经定义了a的值是0123,即83。
那么同样可以使用 Integer.toString() 中的radix来破解,radix置为8即可。

jshell> String e = Integer.toString(a, 8);
e ==> "123"

结果不带先导0。

总结

有关八进制的使用,大概可以这么做一下归纳:

  • 八进制用的不多,不如二进制、十进制、十六进制广泛。
  • 八进制直接赋值要加先导0,但显示出来的还是十进制的值,底层还是二进制在运算,八进制没实际意义。注意这里不是o或者O,是0。
  • 八进制使用printf()打印的时候用的是"%o",不是O或者0。
  • 将String转换成八进制数的时候,使用Integer.parseInt(),指明radix即可,结果还是十进制(显示)/二进制(底层)表示的。注意String不必加先导0。
  • 八进制数转成String的时候,使用逆向的Integer.toString(),指明radix即可,结果就是不带先导0的八进制字符串表示。

【Java】八进制那些事相关推荐

  1. java 静态代码块_关于Java你不知道的那些事之代码块

    前言 普通代码块:在方法或语句中出现的{},就被称为代码块 静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候 普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执 ...

  2. Java 混淆那些事(五):ProGuard 其他的选项

    本文已授权微信公众号「玉刚说」独家发布. 这篇是我们「Java 混淆那些事」第五讲,其实通过前四篇大家已经能够写出正常的混淆规则了,这一篇是简单的介绍一下不怎么常用的一些命令,个人觉得重要的会单独拿出 ...

  3. java八进制转换器,Java将八进制转换为十进制

    本文概述 我们可以使用Integer.parseInt()方法或自定义逻辑在Java中将八进制转换为十进制. Java八进制到十进制的转换:Integer.parseInt() Integer.par ...

  4. 关于R.java和ButterKinfe独特的R2.java的那些事

    关于R.java和ButterKinfe独特的R2.java的那些事 一.Android的R.java文件   Android项目中,当Android应用程序被编译,会自动生成一个R类,包含了所有re ...

  5. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  6. java八进制数转十进制数_Java程序八进制数与十进制相互转换

    Java程序八进制数与十进制相互转换 在此程序中,您将学习如何使用Java中的函数将八进制数转换为十进制数,反之亦然. 示例1:将十进制转换为八进制的程序 public class DecimalOc ...

  7. java八进制写法_Java中8进制和16进制的表示方法

    由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将是: ...

  8. JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....

    关于Java面试,面试官一般喜欢问哪些问题? 本文对一些高频问题做了汇总,为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于 JAVA 接下来,我们逐条来看看每个问题及答案 JDK. ...

  9. 关于Java你不知道的那些事之Java注解和反射

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:轻 ...

最新文章

  1. Error creating bean with name 'messageSource' defi
  2. 甩锅!偷懒!PUA!转嫁压力!铲除异己!压榨下属!这就是职场leader真面目!...
  3. JavaScript DOM编程艺术 - 读书笔记1-3章
  4. HTML实现跳转到页面指定位置
  5. 中的挂起是什么意思_书房装饰挂什么画好 书法字画给你想要的诗意生活
  6. VMware Workstation 8正式版下载+密钥序列号
  7. python异步_Python中的异步编程
  8. 别让数据坑了你!用置信学习找出错误标注(附开源实现)
  9. OPPO K9s官宣:5000mAh超大电量 充电功率阉割明显
  10. 让vue文件直接在浏览器中运行
  11. mac系统csv转ansi_迅捷文字转语音 for mac
  12. 区块链 试题_区块链期末复习四
  13. 微信群发机器人源代码
  14. linux怎么查服务器的ip地址查询,Linux操作系统查看当前服务器网卡的IP地址
  15. HDFS java接口——实现目录增删文件读写
  16. 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程
  17. 关于百度网盘下载过慢的解决方法
  18. 知识图谱构建:py2neo的实体关系以及节点显示图片
  19. How to use segment advisor
  20. python中字符串转成数字的几种方法

热门文章

  1. FPGA中计数器设计探索
  2. vscode格式化关于符合eslint检测语法配置
  3. HTML5笔记1——HTML5的发展史及标签的改变
  4. 板邓:wordpress中add_action()和do_action()关系
  5. php 大流量网站访问
  6. zoj1738 Lagrange's Four-Square Theorem(DP)
  7. 利用XMLSerializer将对象串行化到XML
  8. Vue入门 ---- vuex
  9. Golang——死锁、互斥锁、读写锁的实现
  10. html5 客户端数据缓存机制,深入理解HTML5离线缓存机制