操作数

Java 中的 ==, equals 与 hashCode 的区别与联系

匿名 (未验证) 提交于 2019-12-02 21:53:52
1、概念 == : 该操作符生成的是一个boolean结果,它计算的是 操作数的值之间的关系 equals : Object 的 实例方法 ,比较两个对象的 content 是否相同 hashCode : Object 的 native方法 , 获取对象的 哈希值 ,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数 1、操作数的值 基本数据类型变量 在Java中有八种基本数据类型:   浮点型:float(4 byte), double(8 byte)   整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)   字符型: char(2 byte)   布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值”true”和”false”)    对于这八种基本数据类型的变量,变量直接存储的是“值”。因此,在使用关系操作符 == 来进行比较时,比较的就是“值”本身。 要注意的是, 浮点型和整型都是有符号类型的(最高位仅用于表示正负,不参与计算【以 byte 为例,其范围为 -2^7 ~ 2^7 - 1,-0即-128】),而char是无符号类型的(所有位均参与计算,所以char类型取值范围为0~2^16-1) 。 引用类型变量 在Java中, 引用类型的变量存储的并不是“值

Java 运算符

只谈情不闲聊 提交于 2019-12-02 19:58:14
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组: 算术运算符 http://www.jinnan411.top/?p=845 关系运算符 http://www.jinnan411.top/?p=843 位运算符 逻辑运算符 赋值运算符 其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10,变量B的值为20: 操作符 描述 例子 + 加法 - 相加运算符两侧的值 A + B 等于 30 - 减法 - 左操作数减去右操作数 A – B 等于 -10 * 乘法 - 相乘操作符两侧的值 A * B等于200 / 除法 - 左操作数除以右操作数 B / A等于2 % 取余 - 左操作数除以右操作数的余数 B%A等于0 ++ 自增: 操作数的值增加1 B++ 或 ++B 等于 21(区别详见下文) -- 自减: 操作数的值减少1 B-- 或 --B 等于 19(区别详见下文) 实例 下面的简单示例程序演示了算术运算符。复制并粘贴下面的 Java 程序并保存为 Test.java 文件,然后编译并运行这个程序: http://www.jinnan411.top/?p=841 实例 public class Test

微机原理与接口技术笔记(二)

佐手、 提交于 2019-12-02 19:42:25
目录 转移类指令 循环控制指令 过程调用指令 中断控制指令 处理器控制指令 汇编语言源程序 过程 语句类型 伪指令 数据定义伪指令 符号定义伪指令 段定义伪指令 设定段寄存器伪指令 结束伪指令 过程定义伪指令 宏定义伪指令 调整偏移量伪指令 系统功能调用 单字符输入 字符串输入 单字符输出 字符串输出 返回操作系统功能 上一篇笔记: https://www.cnblogs.com/Tony100K/p/11653755.html 转移类指令 JMP Label 段内直接转移 MOV BX,1200H JMP BX执行完之后 IP=1200H了 MOV BX,1200 JMP WORD PTR[BX]段内间接转移,1200和1201这两个单元送给了IP 段间转移也是32位 JMP FAR Label 间接转移 JMP DWORD PTR[BX] DWORD指32位 低地址送IP,高地址送CS 条件转移范围只有 -128到127 ​ 统计内存数据段中以TABLE为首地址的100个8位带符号数中的正数\负数和零的个数 START: XOR AL,AL MOV PLUS,AL MOV MINUS,AL MOV ZERO,AL LEA SI,TABLE MOV CX,100 CHECK: LODSB OR AL,AL JS X1 JS X2 INC PLUS JMP NEXT X1: INC

精确解释java的volatile之可见性、原子性、有序性(通过汇编语言)

我是研究僧i 提交于 2019-12-02 18:52:00
一、实验环境: 1、Idea代码编辑器 2、jdk1.8.0_92 3、win10_x64 二、易产生误解的Java字段Volatile volatile保证了可见性,但是并不保证原子性!!! 1.volatile关键字的两层语义   一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:   1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。   2)禁止进行指令重排序。 volatile的可见性,即任何时刻只要有任何线程修改了volatile变量的值,其他线程总能获取到该最新值。具体更多实现可以参阅缓存一致性协议。 2.那么volatile为什么又不能保证原子性呢? 以volatile int i = 10;i++;为例分析: i++实际为load、Increment、store三个操作。 某一时刻线程1将i的值load取出来,放置到cpu缓存中,然后再将此值放置到寄存器A中,然后A中的值自增1(寄存器A中保存的是中间值,没有直接修改i,因此其他线程并不会获取到这个自增1的值)。如果在此时线程2也执行同样的操作,获取值i==10,自增1变为11,然后马上刷入主内存。此时由于线程2修改了i的值,实时的线程1中的i==10的值缓存失效,重新从主内存中读取,变为11

第三章、处理数据

岁酱吖の 提交于 2019-12-02 18:10:24
变量 :可以用来存储数据。 变量命名规则 : 名称只能使用字母 第一个字符不能是数字 不能是C++关键字 区分大小写 C++对变量名长度无限制,但是运行平台可能有限制 变量命名规范 变量命名有明确意义 驼峰命名法strUserName 帕斯卡命名法UserName,常用于类名 常用前缀:str(字符串)、b(布尔值)、p(指针)、c(单个字符) 变量声明方式 :<变量类型> 变量名; 变量类型和范围 : 类型 类型 位 范围( 2^( 字节数 *8) ) 字符 char 1 个字节 -128 到 127 或者 0 到 255 无符号字符 unsigned char 1 个字节 0 到 255 整型 int 4 个字节 -2147483648 到 2147483647 无符号整型 unsigned int 4 个字节 0 到 4294967295 短整型 short int 2 个字节 -32768 到 32767 无符号短整型 unsigned short int 2 个字节 0 到 65,535 长整型 long int 8 个字节 -2^(64-1) 到 2^(64-1) 无符号长整型 unsigned long int 8 个字节 0 to 2^64 浮点型 float 4 个字节 +/- 3.4e +/- 38 (~7 个数字) 双浮点型 double 8 个字节 +/-

class线程信息

有些话、适合烂在心里 提交于 2019-12-02 17:23:57
字节码与数据类型 在虚拟机的指令集中,大多数的指令包含了其操作所对应的 数据类型信息 iLoad:从局部变量表中加载int型数据到操作数栈 大多数指令包含类型信息 类型多,指令少 加载与存储指令 加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈直接来回传输 将局部变量表加载到操作数栈: iload lload fload dload aload 将一个数值从操作数栈存储到局部变量表:istore :lfda 将一个常量加载到操作数栈:bipush sipush ldc ldc_w ldc2_w aconst_null iconst_m1 iconst 扩充局部变量表的访问索引的指令:wide 类型转换指令 类型转换指令可以将两种不同的数值类型进行相互转换,这些转换操作一般用于实现用户代码中的显示类型转换操作以及用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题 宽化类型处理和窄化类型处理 L2b i2c i2s l2i 来源: https://www.cnblogs.com/snail-gao/p/11756545.html

速读《深入理解计算机系统》

时光毁灭记忆、已成空白 提交于 2019-12-02 13:04:31
本周速读了《深入理解计算机系统》这本书,这本书从程序员的角度介绍了计算机系统的内在运作,展示了一些本质概念是如何实际的影响应用程序的正确性、性能和实用性的。收获如下: 1、关于进程和线程 进程是操作系统对运行程序的一种抽象,是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 线程有时被称为轻量级进程,是操作系统能够进行运算调度的最小单位。线程是进程中的一个实体,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源,同一进程中的多个线程之间可以并发执行。 2、几种数据传送指令 movl:传送双字,源操作数指定一个值,可以是立即数,可以存放在寄存器或存储器中。目的操作数指定一个位置,可以是寄存器或存储器地址。 movw:传送两个字节,当一个操作数为寄存器时,必须为下图中八个双字节寄存器元素中的一个。 movb:传递一个字节,当一个操作数为寄存器时,必须为下图中八个单字节寄存器元素中的一个。 movsbl和movzbl负责拷贝一个字节,并设置目的操作数中其余的位。 movsbl的源操作数是单字节的,并将高24位设置为源字节的最高位,然后拷贝到双字的目的中。 movzbl的源操作数是单字节的,在前面加24个0扩展到32位,然后拷贝到双字的目的中。 3、寄存器的使用惯例

JVM内存结构

安稳与你 提交于 2019-12-02 12:33:59
JVM运行时内存区域结构 一、方法区(线程共享) 1. 什么是方法区? 方法区是系统分配的一个内存逻辑区域,用来存储类型信息(类的描述信息)。 2. 方法区的特点 方法区是线程安全的。由于方法区是线程共享的,所以方法区的数据访问必须设计成是线程安全的。例如,如果有多个线程访问方法区的同一个类,而这个类还没有被加载,这时候只能有一个线程去进行类加载,其他的线程必须等待。 方法区的大小不是固定的。JVM可以根据应用需要动态的调整。此外,方法区也不必是连续的。 方法区也可以被垃圾回收,当某个类不再被使用的时候,JVM将卸载这个类,进行垃圾回收。 3. 方法区里面存的是什么? 3.1 类型信息 对每个加载的类型,JVM必须在方法区保存这个类型的: 类型的全限定名 这个类型直接父类的完整有效名(java.lang.Object和Interface除外) 这个类型的修饰符(public,abstract, final的某个子集) 直接超接口的全限定名 类型标志(该类是类类型还是接口类型) 3.2 类型的常量池 存放该类型所用到的常量的有序集合,包括直接常量(如字符串、整数、浮点数的常量)和对其他类型、字段、方法的符号引用。常量池中每一个保存的常量都有一个索引,就像数组中的字段一样。因为常量池中保存中所有类型使用到的类型、字段、方法的字符引用,所以它也是动态连接的主要对象

C++重载操作符

久未见 提交于 2019-12-02 12:14:54
1.重载操作符的必要性 C++的数据类型分为 基础数据类型 和 构造数据类型 ,基础数据类型客户直接完成算数运算,但是比如类这样的新构造的数据类型是无法通过基本运算符进行算数运算的。此时,便需要重载操作符。 2.形式和规则 大多数的重载运算符可被定义为 普通的非成员函数 或者被定义为 类成员函数 。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 Box operator + ( const Box & ) ; 如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator + ( const Box & , const Box & ) ; 2.1一元运算符 只对一个操作数进行操作,这里包括: 一元减运算符,即负号( - );递增运算符( ++ )和递减运算符( – ) 递增运算符包括前置和后置两种情况,区别如下: 前置++:即++运算符位于操作数的前面,例如:++i; 后置++:即++运算符位于操作数后面,例如:i++; 1、前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。 2、前置++需要返回引用,因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。而后置++返回的不是引用

汇编语言学习笔记2- X86处理器构架

泄露秘密 提交于 2019-12-02 11:23:24
X86处理器构架 一般概念 中央处理单元(CPU)组成部件: 寄存器、时钟、控制单元、算术逻辑单元 总线类型: 数据总线、控制总线、地址总线、*I/O总线 指令执行周期: 取指、译码、执行 (如用到存储器操作数,则还需要取操作数、存操作数) 访问存储器要比寄存器花费更多的时间的原因: 内存常处于CPU之外,对访问请求响应慢一些,而寄存器硬连接在CPU之内 主要三种操作模式: 保护模式、实地址模式、系统管理模式 、*虚拟8086模式 基本执行环境 1.EAX被称为扩展累加器,乘除指令默认使用 2.ECX被默认使用为循环计数器 3.ESP被称为扩展堆栈指针 4.ESI和EDI被称为扩展源变址和扩展目的变址 5.EBP被称为扩展帧指针 6.EIP为指令指针,包含下一条将要执行的指令地址 32位 16位 高8位 低8位 EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL 32位 16位 ESI SI EDI DI EBP BP ESP SP 状态标志位 CF(CY) 进位标志 无符号运算最高有效位产生进位时为1 OF(OV) 溢出标志 有符号运算操作数超出机器能表示的范围表示溢出,溢出时为1 SF(NG) 符号标志 记录运算结果的符号,结果负时为1 ZF(ZR) 零标志 运算结果等于0时为1 AF(AC) 辅助进位标志 运算时