首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java编程思想第五版精粹(四)-运算符

注意生成值亦可由没有副作用运算符生成。 几乎所有运算符都只能操作基本类型(Primitives)。 唯一例外是 =、== 和 !=,它们能操作所有对象(这也是令人混淆一个地方)。...2.2 赋值运算符 (=) 2.2.1 作用 获取右值并赋给左值。右值可以是任何常量、变量或者可产生一个返回值表达式。左值必须是一个明确、已命名变量。即要有一个物理空间存放右值。...基本类型赋值很简单。因为基本类型持有的是实际值而非一个对象引用。只是将内容从一个地方复制到另一个地方赋值对象时,实际上是把引用从一个地方复制到另一个地方。...适当时候,Java 会将一种数据类型自动转换成另一种。除了布尔类型数据,Java 允许任何基本类型数据转换为另一种基本类型数据 可以程序自动转换时显式、强制地使此类型发生转换。...若想重新使用较小类型,必须使用强制转换(由于重新分配回一个较小类型,结果可能会丢失精度)。Java 不需要 sizeof() 方法,因为所有类型大小不同平台上是相同

74211

java基础之基本操作符使用(上)

一、前言 最底层,java中数据是通过使用操作符来操作。 二、运算符   运算符以一个或多个自变量为基础,可生成一个新值,主要如下。...三、优先级   最简单规则就是先乘除后加减。我们经常都会忘记其他优先级规则,所以应该用括号明确规定计算顺序。例如下面的代码,加括号和不加会有不同结果。...a=5 b=1 四、赋值 赋值是用等号运算符(=)进行。它意思是“取得右边值,把它复制到左边”。右边值可以是任何常数、变量或者表达式,只要能产生一个值就行。...,将一个对象赋值另一个对象,实际上是将“引用”从一个地方复制到另一个地方。...如下图,当b=a时,我们b指向地址跟a相同

26710
您找到你想要的搜索结果了吗?
是的
没有找到

JVM笔记-HotSpot算法细节实现

2.3.1 抢先式中断 思想:无需用户线程代码配合,垃圾收集时,系统首先把所有用户线程全部中断;此时若有用户线程不在安全点,则恢复执行,直至它到达安全点再中断。 这种方案现在几乎不用了。...安全区域是指能够确保某一段代码片段中,引用关系不会发生变化,因此在这个区域中任意地方开始垃圾收集都是安全。可以理解扩展拉伸安全点。...应用写屏障后,虚拟机会为所有赋值操作生成相应指令,一旦收集器写屏障中增加了更新卡表操作,无论更新是不是老年代对新生代引用,每次只要对引用进行更新,就会产生额外开销。...该问题是处理底层细节时经常需要考虑。 5.1.2 如何避免 如何避免“伪共享”问题:采用无条件写屏障,而是先检查卡表标记,仅当该卡表元素未被标记过时才将其标记为变脏。...理论证明,当且仅当以下两个条件同时满足时,才会产生“对象消失”问题: 赋值器插入了一条或多条从黑色对象到白色对象新引用; 赋值器删除了全部从灰色对象到该白色对象直接或间接引用。

1K10

RefactoringGuru 代码异味和重构技巧总结

具有不同接口备选类 两个类具有相同函数,但方法名不同。 更改阻碍 这些异味意味着,如果你需要在代码某个地方更改某些内容,那么你也必须在其他地方进行许多更改。因此,程序开发变得更加复杂和昂贵。...重复代码 两段代码看起来几乎相同。 冗余类 理解和维护类总是需要花费时间和金钱。因此,如果一个类不足以吸引你注意力,它应该被删除。...解决方案:将缺少关联添加到需要它类中。 将双向关联改为单向关联 问题:类之间存在双向关联,但其中一个类不使用另一个功能。 解决方案:删除使用关联。...引入空对象 问题:由于一些方法返回null而不是真实对象,所以代码中有很多null检查。 解决方案:返回一个显示默认行为空对象,而不是null。...解决方案:抛出一个异常。 用测试替换异常 问题:一个简单测试就能完成任务地方抛出异常? 解决方案:用条件测试替换异常。

1.8K40

SAP数据迁移规划:准备、工具和合作伙伴是关键

迁移之前数据准备度可能会对项目所需时间、完成项目所需资源以及别的 IT 系统停机时间产生巨大影响。...使用正确数据迁移工具是关键,但不是唯一考虑因素虽然数据迁移工具确实简化了流程,但数据迁移不仅仅是将相同东西从一个地方移动到另一个地方。...为了充分利用像S4 / HANA这样新ERP系统,企业需要决定哪些数据仍然有用。拥有 30-35% 使用数据公司很常见,这会占用宝贵资源进行迁移,而几乎没有业务收益。...这就是为什么与经验丰富转型合作伙伴合作以及选择正确数据迁移工具会对数据迁移项目的成功产生如此大影响。迁移之前清理数据您只想将所需内容移动到新系统。...但需要清理和检查不仅是数据,还有相关自定义和内部开发。一旦您面对大量要审查所有元素列表,你可能很想从头开始。

29850

浅谈Java虚拟机(HotSpot)内存回收相关细节

优化GC Roots查找 由于目前主流Java虚拟机使用都是准确式垃圾收集,所以当用户线程停顿下来之后,其实并不需要一个不漏地检查完所有执行上下文和全局引用位置,虚拟机应当是有办法直接得到哪些地方存放着对象引用...轮询标志地方和安全点是重合,另外还要加上所有创建对象和其他需要在Java堆上分配内存地方,这是为了检查是否即将要发生垃圾收集,避免没有足够内存分配新对象。...经过即时编译后代码已经是纯粹机器指令流了, 这就必须找到一个机器码层面的手段,把维护卡表动作放到每一个赋值操作之中。...写屏障可以看作虚拟机层面对“引用类型字段赋值”这个动作AOP切面,引用对象赋值时会产生一个环形(Around)通知, 供程序执行额外动作, 也就是说赋值前后都在写屏障覆盖范畴内。...为了避免伪共享问题,一种简单解决方案是采用无条件写屏障,而是先检查卡表标记, 只有当该卡表元素未被标记过时才将其标记为变脏。

45820

技术积累 - 代码问题及对策

捕获潜在异常 第二个容易出错地方捕获潜在异常。调用API接口、库函数或系统服务等,只顾着享受便利却不做防护,常导致因为局部失败而影响整体功能。最好防护依然是“防御式编程”。...重复创建几乎完全相同(开销大)对象;c. 数据库访问、网络调用等服务未处理超时情况;d. 多重循环对于大数据量处理算法性能低;e....多业务耦合 在业务边界仔细划分清晰情况下出现,一个业务过多深入和掺杂另一个非相关业务实现细节。...声明时初始化 声明时初始化通常情况下都不会是问题,因为后面会进行赋值。不过,如果赋值过程中出现异常,那么可能会返回空值,从而导致空值异常。通常,变量声明时赋予默认初始值是个好习惯。...作用域过大 由于C语言影响,猿媛们会在开头就定义好一些变量或要返回对象,很靠后地方才使用到。不必要过大作用域对变量和对象变化产生不可测影响,并增大理解成本。

86740

C++面试知识总结

链接阶段:例如,某个源文件中函数可能引用了另一个源文件中定义某个函数;程序中可能调用了某个库文件中函数。 1.5 预编译 定义:预编译又称为预处理 , 是做些代码文本替换工作。...引用在创建同时必须初始化,保证引用对象是有效,所以不存在NULL引用。 指针定义时候不必初始化,所以,指针则可以是NULL,可以定义后面的任何地方重新赋值。...因为不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象引用,所以比指针安全。由于const 指针仍然存在空指针,并且有可能产生野指针,所以还是不安全。...空指针:空指针表示“未分配” 或者“尚未指向任何地方指针。 区别:空指针可以确保指向任何对象或函数; 而野指针或初始化指针则可能指向任何地方。...3.11 引用与多态关系 引用就是对象别名。 引用主要用作函数形参。 引用必须用与该引用同类型对象初始化: 引用是除指针外另一个可以产生多态效果手段。

1.7K41

札记:Java异常处理

另一个子类是Error,它只能由Java运行时本身错误时被创建,我们app不要去继承它,也无法处理它。 接下来所谈及异常都是Exception子类,涉及Error。 ?...从“含义”上去区分RuntimeException和非RuntimeException比较困难,另一个分类是,继承自Error和RuntimeException类都是检查(unchecked)异常,...上面的示例MyException继承自Exception,这样它就成为一个检查异常,相反地,如果MyException继承自RuntimeException则它就成为一个检查异常。...一个方法如果会产生检查异常,那么通过编译前,就必须在方法声明部分一起使用throws关键字声明将可能抛出这个异常,声明意味着告诉调用方法执行期间可能会抛出对应异常对象。...块中代码保证无论是否发生异常也会执行,虽然可以选择一个特别设计catch中捕获任何异常来完成同样目的,但是代码会很丑陋,需要在try和catch中同时包含相应代码

1.2K80

MCMCrstan贝叶斯回归模型和标准线性回归模型比较

R2OpenBugs 或 rjags 中,可以使用代码调用单独文本文件,并且可以对 rstan 执行相同操作,但出于我们目的,我们 R 代码中显示它。首先要注意是模型代码。...种类 声明块 建模建模数据 数据,转换后数据 建模参数,缺失数据 参数,转换参数 建模参数 数据,转换后数据 产生量 转换数据、转换参数、生成量 循环索引 循环语句 转换后数据块是您可以执行对数或中心化等类似操作地方...与数据块一样,您只能声明这些变量,不能进行任何赋值。在这里,我们注意到要估计 β 和 σ,后者下限为零。在实践中,如果截距或其他系数显着不同尺度上,您可能更愿意将它们分开建模。...然而,作为进一步检查,我们将多次运行整个过程,也就是说,有一个以上链。由于这些链将从不同地方开始,如果多个链最后都到达了同一个结果,我们就可以对结果更有信心。...你会注意到Stan将其代码编译为C++时间可能比运行模型时间要长,而在电脑上,每条链只需要一秒钟多一点时间。

93910

codeReview常见代码问题

捕获潜在异常 第二个容易出错地方捕获潜在异常。调用API接口、库函数或系统服务等,只顾着享受便利却不做防护,常导致因为局部失败而影响整体功能。最好防护依然是“防御式编程”。...重复创建几乎完全相同(开销大)对象;         c. 数据库访问、网络调用等服务未处理超时情况;         d. 多重循环对于大数据量处理算法性能低;         e....多业务耦合   在业务边界仔细划分清晰情况下出现,一个业务过多深入和掺杂另一个非相关业务实现细节。...声明时初始化   声明时初始化通常情况下都不会是问题,因为后面会进行赋值。不过,如果赋值过程中出现异常,那么可能会返回空值,从而导致空值异常。通常,变量声明时赋予默认初始值是个好习惯。...作用域过大   由于C语言影响,猿媛们会在开头就定义好一些变量或要返回对象,很靠后地方才使用到。不必要过大作用域对变量和对象变化产生不可测影响,并增大理解成本。

1.2K30

CodeReview常见代码问题

捕获潜在异常 第二个容易出错地方捕获潜在异常。调用API接口、库函数或系统服务等,只顾着享受便利却不做防护,常导致因为局部失败而影响整体功能。最好防护依然是“防御式编程”。...重复创建几乎完全相同(开销大)对象;c. 数据库访问、网络调用等服务未处理超时情况; d. 多重循环对于大数据量处理算法性能低;e....多业务耦合 在业务边界仔细划分清晰情况下出现,一个业务过多深入和掺杂另一个非相关业务实现细节。...声明时初始化 声明时初始化通常情况下都不会是问题,因为后面会进行赋值。不过,如果赋值过程中出现异常,那么可能会返回空值,从而导致空值异常。通常,变量声明时赋予默认初始值是个好习惯。...作用域过大 由于C语言影响,猿媛们会在开头就定义好一些变量或要返回对象,很靠后地方才使用到。不必要过大作用域对变量和对象变化产生不可测影响,并增大理解成本。

88500

Dotnet 6.0,你值得拥有

因此,我们需要在各个使用地方,加上字段赋值检查而在最新语言中,对于这样需求,增加了一个 required 属性。...非空参数检查 我们写一个方法时,成熟程序员,都会做参数非空检查: public string FormatName( string name ) { if( string.isNullOrEmpty...因此,在其它文件中,如果需要使用时,可以写对应 using ,直接写代码即可。...强随机数 我们知道,以前随机数 Random 类是弱随机数,来自于一个算法,并不能做到真正随机。生成随机数序列取决于种子,相同种子会产生相同随机数序列。...现在,我们有了另一个方式,可以设置一个时间,以 Timeout 方式结束这个异步进程。

75720

FindBugs使用

3 FindBugsEclipse使用 需要静态检查项目上点击右键,按照上图所示,点击Find Bugs,等待静态检查进度完成。 小瓢虫所在位置即为问题代码所在位置。...因为Java代码在编译时解析重载方法方式,在运行时使用几乎总是在对象中定义这个版本方法,而不是Bob中定义一个(除非显式将equals()方法参数强制转换为Bob类型)。...在这种情况下,Bob类应当定义一个接受类型为Object参数equals()方法。 4.2检测:忽略方法返回值 这个检测器查找代码中忽略了不应该忽略方法返回值地方。...FindBugs可以确定一个值为null而另一个值不为null时,检测类似的错误,例如: 1 Person person =aMap.get("bob"); 2 if (person !...4.6使用代码检查 查找从未使用私有字段和本地变量、执行不到语句、从未调用私有方法,等等。

1.4K31

介绍功能测试中故障模型建立

5)使用可能产生错误合法输入组合:测试多个输入值组合,确认这些值组合是否会互相影响而引起软件失效。 6)重复输入相同合法输入序列:检测软件是否考虑了循环处理边界。 3....例如通过一个正确输入不同情况下产生不同输出情况可以对输入和输出关系进行进一步验证;可采用列举等方法,强制软件产生不符合业务背景知识无效输出,从而进行处理,规避不必要错误;强制修改输出属性...、查看输出结果,测试初始化代码和修改代码是否同步;检查用户界面刷新情况,不同操作下测试界面刷新时间是否正确、界面刷新区域计算是否正确。...包括变量定义与使用方面的错误;数据冗余;数组变量越界错误;数据类型匹配错误;还有数据操作方面错误,包括函数调用参数传递错误、赋值语句错误等。...循环条件错误中包括变量错误和运算符错误,执行循环之前,循环变量初值设置出错以致永不循环;进入循环以后,循环变量值不作修改以致发生死循环。

1.1K10

抛弃变量,编写更加可读JavaScript代码

从长远来看,几乎在所有情况下这都是最重要。 命令式编程 命令式编程今天仍然是主流编码方式。这是因为执行命令是计算机本来工作方式。命令式代码非常适合计算机,但它不适合人类。...如果你打开一个分析工具并且仔细观察,可能会看到某部分代码运行了3毫秒,而不是1毫秒,但是你不会注意到一个按钮点击之后产生延迟。某些情况下,比如一些复杂数学计算,会有很大区别。...,那就是除了return,删除任何一行代码,静态检查都会立即识别出来并产生警告让你知道。...如果声明了一个常量,但却从来没有用到它,那么你可以安全删除它。可以使用ESLintno-unused-vars 规则来检测。而在命令式代码中,大多数情况都很难检测到这些。...通常,我会遵守下面的这些最佳实践: 将产生副作用代码写在更容易识别的地方。例如,代码底部。这将帮助读代码的人辨别出哪一部分可以进行安全重构,哪一部分是比较危险

48430

(2021最新版)Java后端面试题|Java基础部分

但是如果发现有值,这时会调用equals()方法来检查两个对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。...因此使用final修饰局部变量时,即可以定义时指定默认值(后面的代码不能对变量再赋值),也可以指定默认值,而在后面的代码中对final变量赋初值(仅一次) public class FinalVar...; 如果是引用类型变量,则在对其初始化之后便不能再让其指向另一个对象。...虽然接口功能上会弱化许多,但是它只是针对一个动作描述。而且你可以一个类中同时实现多个接口。...Java中,这种供虚拟机理解代码叫做 字节码(即扩展名为 .class文件),它不面向任何特定处理器,只面向虚拟机。 每一种平台解释器是不同,但是实现虚拟机是相同

76011

重构·改善既有代码设计.02之代码“坏味道”

如果你一个以上地点看到相同程序结构,那么可以肯定:设法将他们合二为一,程序会变得更好。 Long Method 过长函数。...函数对某个类兴趣程序高于对自己所处类兴趣。如果某个函数为了计算某个值,需要从另一个对象中调用几乎一般取值函数,那么就该迁移到它该去地方。 Data Clumps 数据泥团。...单你为某个类增加一个子类,必须也为另一个类相应增加一个子类。如果你发现某个继承体系类名称前缀和另一个继承体系类名称前缀完全相同,那么便是这种坏味道。 Lazy Class 冗赘类。...“花合理实践抓出大多数bug”好过“穷尽一生抓出所有bug” 重构第一步:构建可靠测试环境 类应该包含他们自己测试代码 确保所有测试都完全自动化,让它们检查自己测试结果 一套测试就是一个强大...你应该把测试集中可能出错地方。观察代码,看哪儿变得复杂;观察函数,思考哪些地方可能出错。 不要因为测试无法捕捉所有bug就不写测试,因为测试的确可以捕捉到大多数bug。

10310

RUST 语言特性之所有权

作为一名 C/C++ 程序员,C/C++ 语言中指针是使用得最爽几乎无所不能,各种奇技淫巧也层出穷。但 C/C++ 语言中最折磨人也是指针,伴随着开发过程就是和指针导致内存问题做斗争。...RUST 使用包含特定规则所有权系统来管理内存,这套规则允许编译器在编译过程中执行检查工作,而不会产生任何运行时开销。这实际上是综合了上面两种内存管理优势,看起来似乎没有短板。...研究上面的代码,可以发现一个很适合用来回收内存给操作系统地方:变量 s 离开作用域地方。Rust 变量离开作用域时,会调用一个叫作 drop 特殊函数。...将值传递给函数语义上类似于对变量进行赋值。将变量传递给函数将会触发移动或复制,就像是赋值语句一样。至于何时移动何时复制,和变量类型有关。下面的代码展示了变量函数传递过程中作用域变化。...这些不用特别去记忆,RUST 可以通过静态检查使我们免于犯错。 对于返回值,同样如此。 总结起来,变量所有权转移总是遵循相同模式: 将一个赋值另一个变量时就会转移所有权。

75560

总结c++ primer中notes

如果不是的话,那么编译器会提示错误,而产生可执行文件。 随着程序和使用类型变得越来越复杂,我们将看到静态类型检查能帮助我们更早地发现错误。静态类型检查使得编译器必须能识别程序中每个实体类型。...除了用作赋值操作符左操作数,初始化变量用作任何其他用途都是没有定义初始化变量引起错误难于发现。正如我们之前劝告,永远不要依赖未定义行为。...添加代码到程序一些不相关位置,会导致我们认为是正确程序产生错误结果。 问题出在初始化变量事实上都有一个值。...变量使用前必须先声明或定义。 Best practice: 通常把一个对象定义它首次使用地方一个很好办法。...不可能将引用绑定到另一个对象。

1.6K90
领券