首页
学习
活动
专区
工具
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

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

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

    12010

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

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

    77530

    为什么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。...所以,平时写代码时,保持前后一致性是非常重要的,如果是现有项目基础上开发,那么最好和之前的编码风格保持一致;如果是一个从零开始构建的新项目,那么最好在项目开始之前就统一编码风格,否则到项目后期阶段再修改代价就大了

    783110

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

    为什么要将永久代 (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 为什么要将字符串常量池移动到堆

    84920

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

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

    22340

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

    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 调优比较困难,且容易发生

    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

    35510

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

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

    937100

    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 无永久代,类型信息,字段,方法,常量保存在本地内存的元空间,但字符串常量池、静态变量仍然

    38510

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

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

    67510

    String、StringBuffer与StringBuilder之间区别

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

    24510

    代码在内存的形状

    js 变量名是用来保存内存某块内存区的地址的,而栈区就是用来保存变量名和内存地址的键值对的,所以我们就可以通过变量名获取或者操作某一内存地址上的内容。...console.log(b); // undefined var a; var b = '政采云前端团队'; 然而,js 引擎实际执行代码之前,会先从上往下依次处理变量提升和函数定义,然后再按序执行...并且常量也是唯一的。 所以这也就是为什么 a===b 是 true,因为 === 比较的是变量 a 和 b 在内存的指针指向的物理地址是否相等。...__proto__); // true 这是一段比较标准的组合继承的例子,相信这种代码片段对大家来说应该再熟悉不过了。那么这样的一段代码的运行过程实际内存是什么样的一个过程呢?...首先,如下左图,代码执行之前会进行变量提升和函数定义,所以会在变量栈和函数定义区准备好 obj 、 Animal 、 dog 以及一个不容发现的匿名函数。

    48020

    【CC++教学】关于CC++各个区域内存的划分,你知道多少?

    02 栈区 栈区是由编译器需要的时候分配, 用完会自动清除的一个区域, 通常这个区域存放的是 一些局部变量以及函数的参数等, 栈区的大小一般由编译器决定, 效率比较高, 但空间比较有限。...像其中func函数变量a,变量b, main函数里面的变量val 等局部变量 以及调用func函数传入的参数200等, 这些都是存放在栈区的,...而下面连续同一代码块 定义多个同名变量, 编译器自然给你一个CE了。 03 堆区 前面说的, 栈区是放局部变量的区域, 大小有限。...04 - 全局/静态存储区 这一块区域主要用来, 存储程序的静态变量以及全局变量, 它先于main函数之前分配。 是伴随整个程序的生命周期都存在的。 例如下面的例子: ?...值得一提的是, 字符串常量也是放在静态区的。 从这一点上来说, 我们又可以称字符串常量为无名的静态变量

    72310

    jvm原理——第一篇jvm的运行模式

    方法区还有一块运行时常量池,class文件常量类加载后就被放入运行时常量池,运行时常量池相对于class文件的常量池具有动态性,可以在运行期间通过intern常量放入运行时常量池中,方法区空间不足时会抛出...,而且HotSpot也有取消永久代的趋势,JDK 1.7HotSpot已经开始了“去永久化”,把原本放在永久代的字符串常量池移出。...1.新生代(Young Generation) 新生成的对象优先存放在新生代,新生代对象朝生夕死,存活率很低,新生代,常规应用进行一次垃圾收集一般可以回收70% ~ 95% 的空间,回收效率很高。...GC时当To Survivor区没有足够的空间存放上一次新生代收集下来的存活对象时,需要依赖老年代进行分配担保,这些对象存放在老年代。...老年代的对象生命周期较长,存活率比较高,老年代中进行GC的频率相对而言较低,而且回收的速度也比较慢。

    1.3K20
    领券