java 和 区别_java 和 =的区别
java >> 和 >>> 以及 >>>= 的区别
可能大家都知道java中>> 和 >>> 的区别,那这里我也啰嗦一下,>> 和 >>> 都是右移操作,只不过>>>是无符号右移,也就是右移之后高位补零。对于正数来说,两者没有什么区别,但是对于负数来说,>> 右移之后还是负数,而>>>右移之后就变成了正数,大家可以参看一下例子:
1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = 15;4 System.out.println(java.lang.Integer.toBinaryString(n));5 System.out.println(n >> 2);6 System.out.println(n >>> 2);7
8 int m = -15;9 System.out.println(java.lang.Integer.toBinaryString(m));10 System.out.println(m >> 2);11 System.out.println(m >>> 2);12 }13 }
输出结果 1111
3
3
11111111111111111111111111110001
-4
1073741820
此例以及结果大家一定也能看明白,唯一要注意的是计算机是以补码的形式存储的,大家可以去查看相关资料。那接下来就说一下 >>> 和 >>>= 的区别(因为有一次同学翻看ThreadLocal源码的时候,发现了cleanSomeSlots方法里有>>>=这个操作符,以前没有见过这个操作,只知道>>>是无符号右移,于是我们就讨论起来),我当时写了一段测试代码,如下所示:
1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = -4;4 System.out.println(n >>>= 1);5 System.out.println(n >>> 1);6
7 int j = 4;8 System.out.println(j >>>= 1);9 System.out.println(j >>> 1);10 }11 }12
输出结果 2147483646
1073741823
2
1
从此例中,大家可能比较疑惑了,第9行为什么会输出1,应该是2啊,我也比较纳闷,这个时候同学一点拨,就恍然大悟,其实j在第8行被重新赋值了成了2,而第9行再进行右移当然输出1。从这个例子中我们就知道了其实>>>=就是类似于+=这种操作,右移之后做了一个赋值。
总结
其实移位操作在我们平时用的并不多,但是在阅读JDK源码的时候经常会出现,比如concurrent包里的ThreadPoolExcutor、ConcurrentHashMap等。所以掌握移位操作以及原码、反码、补码、还是很有必要的。
java 和 区别_java 和 =的区别相关推荐
- java 短路判断_java中和的区别(|和|同理)
在java的基础面试题中肯定有这个问题: &和&&的区别? 这个问题很好回答,核心思想就是一个不短路一个短路的问题. 首先说下&, 1.它可以表示二进制中的位运算 分析 ...
- java和c++的区别_JAVA和C++区别详解
JAVA和C++区别详解 来源:-- 作者:-- 浏览:811 时间:2016-08-10 14:18 标签: 摘要: 1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然 ...
- java堆栈区别_JAVA堆栈的区别
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...
- java list set map的区别_Java集合类List/Set/Map的区别和联系
Java集合类List/Set/Map的区别和联系 一.Array , Arrays Java所有"存储及随机访问一连串对象"的做法,array是最有效率的一种. 1. 效率高,但 ...
- java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...
Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...
- Java中string与String区别_JAVA中String与StringBuffer的区别
JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...
- java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析
本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...
- java long 区别_java中long和int的区别
java中long和int的区别 发布时间:2020-06-26 15:37:48 来源:亿速云 阅读:191 作者:Leah 这篇文章将为大家详细讲解有关java中long和int的区别,文章内容质 ...
- Java单精度与双精度区别_java单精度和双精度的区别
为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽,而精 ...
最新文章
- ADT 怎么删除logcat过滤规则
- 防Xss攻击,包含富文本编辑器的处理
- POJ 3322 Bloxorz I(BFS)
- 【2017年第1期】基于征信数据观中国近10年产业间信贷资源的调整路径
- 放弃Venn-Upset-花瓣图,在线拥抱二分网络
- Python: SystemError: Unknown opcode
- 教育部建议采纳:给予导师决定硕博士能否毕业的自主权!
- 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
- oracle交接单,系统交接单模板.docx
- 技术分析是我的唯一信仰
- 软考(软件设计师)中的一些总结
- 力扣每日一题-10-121.买股票最佳时机
- 高通QPST Download使用方法
- mongodb 存储过程 遍历表数据_使用MongoDB存储数据
- 启用计算机来宾账号,开启Windows 10来宾账户
- 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置
- 计算机安全之网络安全议论文,网络安全800字议论文
- Django 学习记录
- Java实现excel大数据量导出
- 一步移民加拿大,BC省雇主担保移民项目
热门文章
- python hbase_Python操作Hbase
- oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
- php编程对联,形容程序员的对联大全
- ap协议java_AP计算机科学A:Java编程类和对象
- 鸿蒙系统有无隐私空间,华为鸿蒙OS系统有隐私空间功能吗 华为p40使用鸿蒙系统体验评测...
- 表格布局页面_对于表格布局管理器的回顾以及接下来的目标
- 【图像超分辨率】RS Image SR Based on Visual Saliency Analysis
- mysql 基于时间分区_MySQL基于时间字段进行分区的方案总结
- CentOS 6.5 安装配置Tomcat7服务器
- Eigen入门之密集矩阵 10 - 矩阵的行优先及列优先存储