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

为什么在变量之前将常量放在比较中?

在变量之前将常量放在比较中的原因是为了提高代码的可读性和可维护性。这种做法被称为"Yoda conditions"。

当我们在代码中比较变量和常量时,我们通常将变量放在比较的右侧。但是,将常量放在左侧可以帮助防止意外地将等号(=)与比较运算符(==)混淆,因为在将常量放在左侧时,如果使用等号(=),编译器会报错。

例如,如果我们使用以下代码:

代码语言:txt
复制
if (x = 10) {
    // do something
}

这将导致一个错误,因为我们意外地使用了赋值运算符(=)而不是比较运算符(==)。

但是,如果我们使用以下代码:

代码语言:txt
复制
if (10 = x) {
    // do something
}

这将导致一个编译错误,因为我们不能将常量赋值给另一个值。

因此,将常量放在比较中的左侧可以帮助防止这种错误,并使代码更具可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 build 方法放在 State 中而不是在 StatefulWidget 中

为什么 build 方法放在 State 中而不是在 StatefulWidget 中呢?其中前2点是源代码的注释中给出的原因,最后一点是我的一点个人理解。...灵活性 将 build 方法放在 State 中比放在 StatefulWidget 中更具灵活性,比如说,AnimatedWidget 是 StatefulWidget 的子类,AnimatedWidget...试想一下,如果 build 方法放在 StatefulWidget 中,则 AnimatedWidget 中的 build 方法需要带一个 State 参数,如下: abstract class AnimatedWidget...闭包 this 指向异常 假设 build 方法在 StatefulWidget 中,StatefulWidget 的子类写法如下: class MyWidget extends StatefulWidget...如果 build 方法在 State 中,代码如下: class MyWidget extends StatefulWidget { final Color color; const MyWidget

91320
  • 在匹配过程中为什么将 found 重置为 False?

    在匹配过程中,将 found 变量重置为 False 通常用于循环或递归结构中以重新初始化某些状态。...为了避免这种情况,需要理解为什么在代码中使用此赋值语句,以及如何正确处理 found 变量。...2、解决方案found = False 的赋值语句用于在每次循环迭代结束后,将 found 变量重置为 False。...found 变量在循环中没有被重置为 False,因此当程序找到第一个匹配项时,found 变量将一直保持 True,导致所有记录被打印到网页浏览器上,即使有些记录不满足查询条件。...例如,如果是在一个字符串匹配的循环中,每次都重置 found 可以确保每个字符的检查都是独立的,并且不会因为之前找到匹配项而跳过未匹配的项。

    7210

    在 Java 中,为什么不允许从静态方法中访问非静态变量?

    在 Java 中,不允许从静态方法中访问非静态变量的原因主要与静态方法和非静态变量的生命周期和作用域有关。具体来说:生命周期不同:静态方法:静态方法属于类,而不是类的实例。...它们在类加载时被初始化,并且在整个应用程序的生命周期中都存在。非静态变量:非静态变量(也称为实例变量)属于类的实例,只有在创建对象时才会被初始化,并且每个对象都有自己的一份副本。...示例代码下面是一个简单的示例,展示了为什么从静态方法中访问非静态变量会导致编译错误:public class Example { // 非静态变量 int instanceVar; /...(instanceVar); } // 实例方法 public void instanceMethod() { // 正确:可以在实例方法中访问非静态变量...:将变量声明为静态变量,这样就可以在静态方法中直接访问。

    6610

    【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘

    恰当的变量声明策略,对于提升程序代码的可读性、维护便捷性以及执行效能具有不可或缺的作用。 在Go语言体系中,变量是存储数据的基本单元,其核心功能在于保存程序运行过程中的信息。...在Go中,变量除了按数据类型划分外,还可以根据其声明的位置和作用域分为两大类:包级变量和局部变量。...接下来,我们将详细探讨局部变量的几种声明形式及其在实际编程中的应用策略。 延迟初始化的局部变量声明 在某些情况下,你可能需要 先声明变量,稍后再根据逻辑流程决定其初始化值。...二、常量 2.1 Go语言常量溯源:从C语言到Go 在探索Go语言常量的设计理念之前,回顾一下C语言中的常量概念是十分有益的,因为C语言对许多现代编程语言的常量和变量处理方式有着深远的影响。...综上所述,Go 语言在变量和常量的处理上,通过静态类型系统、灵活的声明形式、以及iota在枚举中的创新应用,体现了对代码清晰度、类型安全、执行效率的高度重视,同时也兼顾了开发者的便利性和编程的灵活性。

    12910

    在javascript中如何将字符串转成变量或可执行的代码?

    有这样一个需求:当前作用域内有未知的一些变量,其中一个函数中可以拿到某个变量名字符串,怎么能在函数内通过传进来的字符串取到作用域链中的变量值,示例小 demo 如下: const name = '周小黑...' const age = 18 /** * @param {String} e 变量名字符串 * @returns value 通过变量名字符串在作用域链中取到的变量值 */ function...return value } const str = fn('name') 要解决上面的问题,主要就是怎么将字符串转变成可执行的代码?...setTimeout 定时器 setTimeout 的第一个参数我们平时都是传一个函数,它其实也是可以传字符串进去的,在浏览器中是可以正常执行的,在node环境中会报错。...实际上浏览器中也是不推荐这么用的,另外需要注意的是字符串中的变量只能访问全局作用域,不能访问局部作用域,如果全局作用域中没有,就是 undefined。

    86630

    为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

    这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...这是为什么呢?...不会重写成员变量,而是隐藏成员变量 Java文档中对隐藏域的定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。

    3.5K40

    《面试季》经典面试题(七)

    本系列文章主要分享了之前博主真实面试中遇到的一些问题,希望能够帮助准备就业或者跳槽的朋友。 类基础信息 一: 类加载后会存在在哪里 回答: 存放在方法区中。...3、永久代只存在Hotspot虚拟机中,其他实现了JVM的虚拟器并没有这个说法 三: JDK8为什么要使用元空间取代永久代   1、JDK7及之前字符串存在永久代中,容易出现性能问题和内存溢出   2、...五: 字符串常量、静态变量存放在哪里 一: 字符串常量     1.7以前是放在永久代,1.7以后是放在堆中 二: 静态变量     1、1.7前字符串常量池和静态变量存储在永久代     2、JDK7...,并返回给s1,”hello”是一个常量,会先到字符串常量池中查询是否存在这个字符串,没有则分配一个空间并存放”hello”,并将”hello”在常量池的地址存放在new出来的对象中(所以:如果”hello...”)),则先开空间,再拼接(每一个字符串变量在常量池中都有一个地址,如果是多个拼接,则生成新的对象并返回这个对象的地址)。

    24510

    coding感想(一)

    也就是说每次刷完卡后,没有将公交卡放在一个固定的地方,那么当某天你急匆匆的赶上公交车,满身搜寻公交卡时,你就会明白一致性的重要性。如果每次刷完公交卡都放固定的地方,就不会出现找不到的情况。...都分不清什么是常量什么是变量。...这时候你又定义了一个变量,表示资源数量,例如: int numResource 两次定义的变量中,表示数量的number单词一个在前,一个在后,别人读起来就容易产生误解。...因为一般情况下num放在变量尾部表示索引,即hostNum表示第几个host,num放在变量开始位置表示总数,即numHost表示有多少个host。...所以,平时写代码时,保持前后一致性是非常重要的,如果是在现有项目基础上开发,那么最好和之前的编码风格保持一致;如果是一个从零开始构建的新项目,那么最好在项目开始之前就统一编码风格,否则到项目后期阶段再修改代价就大了

    785110

    为什么要将永久代替换为元空间?

    为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 什么是运行时常量池? 字符串常量池有什么作用? JDK 1.7 为什么要将字符串常量池移动到堆中? 下面是正文。...JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。...修正(参见:issue747,reference) : JDK1.7 之前,运行时常量池包含的字符串常量池和静态变量存放在方法区, 此时 HotSpot 虚拟机对方法区的实现为永久代。...String aa = "ab"; // 放在常量池中 String bb = "ab"; // 从常量池中查找 System.out.println(aa==bb);// true JDK1.7 之前运行时常量池逻辑包含字符串常量池存放在方法区...- RednaxelaFX - 知乎 JDK 1.7 为什么要将字符串常量池移动到堆中?

    89520

    jvm之方法区演变及方法区的GC解读

    原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一 Hotspot中方法区的变化: JDK1.6及之前 有永久代(permanet),静态变量存储在永久代上 JDK1.7...有永久代,但已经逐步 “去永久代”,字符串常量池,静态变量移除,保存在堆中 JDK1.8 无永久代,类型信息,字段,方法,常量保存在本地内存的元空间,但字符串常量池、静态变量仍然在堆中。...jdk7中将StringTable放到了堆空间中。因为永久代的回收效率很低,在full gc的时候才会触发。而full gc是老年代的空间不足、永久代不足时才会触发。...,instanceobj随着Test的对象实例存放在Java堆,localobject则是存放在foo()方法栈帧的局部变量表中。...JDK7及其以后版本的HotSpot虚拟机选择把静态变量与类型在Java语言一端的映射class对象存放在一起,存储于Java堆之中,从我们的实验中也明确验证了这一点 方法区的垃圾回收 有些人认为方法区

    23240

    为什么用元空间替代永久代?

    JRockit 是 Java 官方收购的一家号称史上运行最快的 Java 虚拟机厂商,之后 Java 官方在 JDK 8 时将 JRockit 虚拟机和 HotSpot 虚拟机进行了整合。...通过官方的描述,我们似乎找到了答案,也就是说,之所以要取消“永久代”是因为 Java 官方收购了 JRockit,之后在将 JRockit 和 HotSpot 进行整合时,因为 JRockit 中没有“...3.方法区发展史 在 HotSpot 虚拟机中,方法区的实现经历了以下 3 个阶段: JDK 1.6 及之前:方法区使用永久代实现,静态变量存放在永久代; JDK 1.7 :“去永久代”的前置版本,还存在永久代...,不过已经将字符串常量池和静态变量从永久代移到了堆上; JDK 1.8 及以后:无永久代,使用元空间(存放在本地内存中)实现方法区,常量保存在元空间,但字符串常量池和静态变量依然保存在堆中。...总结 永久代和元空间都是 HotSpot 虚拟机对《Java 虚拟机规范》中方法区的实现,在 JDK 1.8 之前 HotSpot 是使用永久代来实现方法区的,但这样会导致 JVM 调优比较困难,且容易发生

    1.1K30

    深入理解Java:String

    说到这里,对常量池中的字符串值的存储位置应该有一个比较明了的理解了。在程序执行的时候,常量池会储存在Method Area,而不是堆中。...对象, * 最后将刚生成的String对象的堆地址存放在局部变量str3中。...2.代码中的字符串常量在编译的过程中收集并放在class文件的常量区中,如"123"、"123"+"456"等,含有变量的表达式不会收录,如"123"+a。...3.JVM在加载类的时候,根据常量区中的字符串生成常量池,每个字符序列如"123"会生成一个实例放在常量池里,这个实例是不在堆里的,也不会被GC,这个实例的value属性从源码的构造函数看应该是用new...将清单1和清单2对应起来看,清单2的字节码中ldc指令即从常量池中加载“aaaaa”字符串到栈顶,istore_1将“aaaaa”存到变量1中,后面的一样,sipush是将一个短整型常量值(-32768

    35710

    JVM之方法区

    典型应用就是数据库连接管理,以及独立会话管理 栈、堆、方法区的交互关系 Person 类的 .class 信息存放在方法区中 person 变量存放在 Java 栈的局部变量表中 真正的 person...JDK 1.8后,元空间存放在堆外内存中 我们可以将方法区类比为Java中的接口,将永久代或元空间类比为Java中具体的实现类 本质上,方法区和永久代并不等价。仅是对Hotspot而言的可以看作等价。...然后操作数 100 从操作数栈中取出,存储到局部变量表中索引为 2 的位置 将本地变量表索引为1的位置的数值(500)压入操作数栈 将本地变量表索引为2的位置的数值(100)压入操作数栈 此时500还没有出栈...,100压入则称为栈顶 将栈中500和100相除的结果(5)放入栈顶,500和100出栈 istore_3:将5出栈,放入局部变量表索引位置为3的地方 将50压入操作数栈 将50出栈,放到局部变量表索引为...JDK1.7 有永久代,但已经逐步 “去永久代”,字符串常量池,静态变量移除,保存在堆中 JDK1.8 无永久代,类型信息,字段,方法,常量保存在本地内存的元空间,但字符串常量池、静态变量仍然在堆中

    8600

    JVM内存与垃圾回收篇第9章方法区

    典型应用就是数据库连接管理,以及独立会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person 类的 .class 信息存放在方法区中 person 变量存放在 Java 栈的局部变量表中...JDK 1.8后,元空间存放在堆外内存中 我们可以将方法区类比为Java中的接口,将永久代或元空间类比为Java中具体的实现类 本质上,方法区和永久代并不等价。仅是对Hotspot而言的可以看作等价。...压入操作数栈 读取本地变量 2 ,压入操作数栈 两数相除,计算结果放在操作数栈顶,之后执行 istore_3 指令,将计算结果从操作数栈中弹出,存入局部变量 3 中 将操作数 50 压入操作数栈...将操作数 50 从栈顶弹出,保存在局部变量 4 中 获取 System.out 输出流的引用(我不太确定) 将本地变量 3 的值取出,压入操作数栈中,准备进行加法运算 执行加法运算后,将计算结果放在操作数栈顶...JDK1.7 有永久代,但已经逐步 “去永久代”,字符串常量池,静态变量移除,保存在堆中 JDK1.8 无永久代,类型信息,字段,方法,常量保存在本地内存的元空间,但字符串常量池、静态变量仍然在堆中。

    40310

    面试题系列第6篇:JVM字符串常量池及String的intern方法详解?

    关于字符串的比较在前面文章中已经详解过,本篇文章基于字符串常量池的存储及在使用intern方法时所引起的内存变化进行一步深层次的讲解。...字符串常量由一个个字符组成,放在了StringTable上。 在《面试题系列第5篇:JDK的运行时常量池、字符串常量池、静态常量池,还傻傻分不清?》...一文中我们已经专门介绍了字符串常量池的位置随着JDK版本的变化而变化,可以参考。 JDK6及之前版本,字符串常量池是放在Perm Gen区(方法区)中。...String wechat2 = new String("程序新视界"); 如果存在对应的值,此时会先在堆中创建一个针对wechat2变量的对象引用,然后将这个对象引用指向字符串常量池中已经存在的常量。...由于wechat和wechat1其实是一个,这里只以wechat和wechat3的比较为例来分析一下这个流程。 在没有调用intern方法之前内存的状态是下图(忽略掉s1部分)这样的: ?

    67910

    【JAVA零基础入门系列】Day4 变量与常量

    对于初学者而言,可以将变量理解为盒子,这些盒子可以用来存放数据,不同类型的数据需要放在对应类型的盒子里。那么,我们为什么要使用盒子呢?...Java是强数据类型语言,每一个变量必须属于一种类型,一个int型数据需要存放在一个int型的变量中,同理,一个double类型的数据需要存放在一个double变量中。...变量在使用之前,都需要声明,如:int num;  想要对一个变量赋值,就需要将变量名放在等号左侧,相应的值放在等号的右侧,如:int num; num =10; 也可以在声明变量的同时初始化变量,给变量赋初始值...,如:int num = 10;声明可以出现在代码的任何地方,但在使用该变量之前必须先声明该变量。...而且还有一个很重要的一点,如果常量的初始化值需要改变,比如一开始设置一个常量叫做 FULL_MARK,一开始你以为满分只有100分,可是程序写完之后,被告知满分是120分,于是你只需要在该常量定义的地方将

    949100

    String、StringBuffer与StringBuilder之间区别

    在开始解释这些问题之前,我们先引入一些必要的知识: ★ Java class文件结构 和常量池 我们都知道,Java程序要运行,首先需要编译器将源代码文件编译成字节码文件(也就是.class...其作用就是复制之前分配的Java.lang.String空间的引用并压入栈顶。那么这里为什么需要这样么做呢?...事实上,在运行这段指令之前,JVM就已经为”Hello world”在堆中创建了一个拘留字符串( 值得注意的是:如果源程序中还有一个”Hello world”字符串常量,那么他们都对应了同一个堆中的拘留字符串...因此”==”比较的是两个不同的堆地址。代码2中局部变量sc,sd中存储的也是地址,但却都是常量池中”Hello world”指向的堆的唯一的那个拘留字符串对象的地址 。自然相等了。...的toString()方法在堆中创建一个String对象,最后将刚生成的String对象的堆地址存放在局部变量sab中。

    25310
    领券