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

使用常量而不是对象表达式本身时在对象内创建的无限个子对象

使用常量而不是对象表达式本身时,在对象内创建的无限个子对象是指在使用对象表达式时,如果每次都直接使用对象表达式本身,会导致在对象内部创建无限个子对象的情况。

常量是指在程序中固定不变的值,而对象表达式是指创建对象的语法表达式。在某些编程语言中,对象表达式可以作为常量使用,也可以作为变量使用。

当我们使用常量而不是对象表达式本身时,意味着我们将对象表达式的值赋给一个常量,然后在对象内部使用这个常量。这样做的好处是可以避免在对象内部重复创建无限个子对象,提高程序的性能和效率。

举个例子来说明,假设有一个对象表达式 objExp,它表示一个复杂的对象结构。如果我们每次需要使用这个对象时都直接使用 objExp,那么每次使用都会创建一个新的对象。而如果我们将 objExp 的值赋给一个常量 objConst,然后在对象内部使用 objConst,那么只会创建一个对象,避免了重复创建无限个子对象。

这种做法在对象的构造函数中特别有用,可以将对象表达式的值保存在常量中,然后在构造函数中多次使用这个常量,避免重复创建子对象。

使用常量而不是对象表达式本身时,在对象内创建的无限个子对象的问题可以通过这种方式得到解决。这样可以提高程序的性能和效率,减少不必要的资源消耗。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云数据库(MySQL、Redis、MongoDB等):https://cloud.tencent.com/product/db
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云视频处理(点播、直播、转码等):https://cloud.tencent.com/product/vod
  • 腾讯云音视频通信(TRTC):https://cloud.tencent.com/product/trtc
  • 腾讯云网络安全(DDoS防护、Web应用防火墙等):https://cloud.tencent.com/product/ddos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

基本类型偏执 简单任务中使用基本类型不是对象(例如货币、范围、电话号码特殊字符串等) 使用常量来编码信息(例如常量USER_ADMIN_ROLE=1表示具有管理员权限用户。)...平行继承体系 每当你为一个类创建个子,你就会发现自己需要为另一个类创建个子类。 可有可无东西 可有可无东西是毫无意义和不必要,如果没有它,代码就会更干净、更高效、更容易理解。...用查询替换临时变量 问题:将表达式结果放在局部变量中,以便以后代码中使用。 解决方案:将整个表达式移动到一个单独方法,并从中返回结果。查询方法,不是使用变量。...解决方案:创建一个新类,并使用对象不是类型代码值。 用子类替换类型代码 问题:你有一个直接影响程序行为代码类型(此字段值触发条件中各种代码)。 解决方案:为代码类型每个值创建子类。...引入空对象 问题:由于一些方法返回null不是真实对象,所以代码中有很多null检查。 解决方案:返回一个显示默认行为对象不是null。

1.8K40

JDK源码解析之 Java.lang.String

②、new关键字创建,直接在堆中创建一个新对象,变量所引用都是这个新对象地址。 实际日常我们也很经常用表达式来拼接字符串,这些字符串对象又是怎么得到呢?...java 中使用字符串最重要一个规则必须记住,一个字符串对象一旦被创建,它内容就是固定不变 public static String str = "abc"; 这个声明会创建一个长度为3,内容为...您不不是abc 字符串改为1111字符串,而是让str 引用名称从新引用1111字符串,不在引用abc 字符串但abc字符串在内存中还是存在,只是现在没有被引用。...保证线程安全,并发场景下,多个线程同时读写资源,会引竞态条件,由于 String 是不可变,不会引发线程问题保证了线程。...若字符串可变,字符串常量池失去意义,基于常量String.intern()方法也失效,每次创建 String 将在堆开辟出新空间,占据更多内存。

27510
  • 第2章 变量和基本类型

    初始化含义是创建变量赋予其一个初始值,赋值含义是把对象的当前值擦除,而以一个新值来代替。要知道,初始化时,变量刚刚创建,此时是没有当前值可供擦除。...下面的式子就是错误。 int ta; ta = 1; 另外,块作用域访问全局作用域同名变量,可以使用域操作符 "::"来实现。...4)非常量引用不能与字面值或表达式绑定到一起。 15.指针 1)指针本身是一个对象,允许赋值和拷贝,而且在生命周期内可以先后指向不同对象。 2)无须在定义赋初值。...块作用域定义,如果未初始化,其值将不确定。 3)引用不是对象,没有实际地址,不能定义指向引用指针。 16.C++11中,最好用 nullptr来初始化空指针。...4)对 const引用。     4-1.允许为一个常量引用绑定非常量对象、字面值,甚至是一个一般表达式类型也没有硬性要求,只要能成功类型转换即可。

    65840

    python语言基础

    长整型(long integers) - 无限大小整数,整数最后是一个大写或小写L。...,而是采用缩进方式表示层级关系 约定使用4个空格缩进 续行 在行尾使用/ 如果使用各种括号,认为括号是一个整体,内部跨行不能用\ 标识符: 1.一个名字,用来指代一个值 2.只能字母、下划线和数字...中要随便使用下划线开头表示符 常量: 一旦赋值就不能改变值标识符 Python中无法定义常量 字面常量: 一个单独量,例如12、"abc"、'2341356514.03e-9' 变量: 赋值后,可以改变值标识符...,==表示是相等,显然两者不是一个东西。...长字符串不会驻留, python内存中各自创建对象 来表示a1,a2,这两个对象拥有相同内容但对象标识符却不相同,所以==值为Trueis值为False 运算符优先级(从高到低) ?

    62310

    String 既然能这样性能调优,我直呼内行(文末送书)

    创建字符串两种方式: String str1 = “码哥字节”; String str2 = new String(“码哥字节”); 当代码中使用第一种方式创建字符串对象,JVM 首先会检查该对象是否字符串常量池中...第二种方式创建,在编译类文件,"码哥字节" 字符串将会放入到常量结构中,类加载,“码哥字节" 将会在常量池中创建调用 new ,JVM 命令将会调用 String 构造函数,堆内存中创建一个...这是因为 str 只是 String 对象引用,并不是对象本身。 真正对象依然还在内存中,没有被改变。...所以 a 和 b 引用是同一个对象。 字符串分割有妙招 Split() 方法使用了正则表达式实现了其强大分割功能,正则表达式性能是非常不稳定。...最后,优化方面,我们还可以使用 intern 方法,让变量字符串对象重复使用常量池中相同值对象,进而节约内存。 通过三种不同方式创建了三个对象,再依次两两匹配,每组被匹配两个对象是否相等?

    42520

    C++中变量声明与定义规则

    离开定义它函数(作用域)但再次调用定义它函数,它又可继续使用,而且保存了前次被调用后留下值。...当一个源程序由多个源程序组成,非静态全局变量各个源文件中都是有效静态全局变量则限制了其作用域,即只定义该变量源文件内有效,同一源程序其他源文件中不能使用它。...1. const对象必须初始化 因为const对象一经创建后其值就不能再改变,所以const对象必须初始化,但是初始值可以是任意复杂表达式: const int i = get_size(); //...顶层const与底层const 指针本身是一个对象,因此指针本身不是常量与指针所指对象不是常量是两个独立问题,前者被称为顶层const,后者被称为底层const。...仅当size()是一个constexpr函数才是常量表达式, 运行时才能获得具体值就不是常量表达式 一个复杂系统中,我们很难分辨一个初始值是否是常量表达式,通过constexpr关键字声明一个变量

    2.3K10

    .NET面试题系列 - C# 3.0 LINQ准备工作

    ,或者某个属性使用了long不是int,则会引入一个新匿名类型。...如果你要创建类型只一个方法中使用,而且其中只有简单字段或者属性没有方法,则可以考虑使用匿名类型。...各个子构造函数都是不公开,要创建表达式树只能使用Expression类提供静态方法。...(它自类型对象创建就应当在对象方法表中) 扩展方法第一个输入参数要加上this(第一个参数类型表示被扩展类型)。扩展方法必须至少要有一个输入参数。...当外部变量被匿名函数函数方法中使用时,称为该变量被捕获(即它成为了一个捕获变量)。 捕获是变量实例不是值,也就是说,匿名函数捕获变量和外部变量是同一个。

    1.2K30

    JDK1.8源码(三)——java.lang.String 类

    ②、new关键字创建,直接在堆中创建一个新对象,变量所引用都是这个新对象地址,但是如果通过new关键字创建字符串内容常量池中存在了,那么会由堆指向常量对应字符;但是反过来,如果通过new...关键字创建字符串对象常量池中没有,那么通过new关键词创建字符串对象是不会额外在常量池中维护。   ...③、使用包含变量表达式创建String对象,则不仅会检查维护字符串池,还会在堆区创建这个对象,最后是指向堆内存对象。...str2;第三个是通过new关键字创建对象常量池中有了该对象了,不用在常量池中创建,然后堆中创建对象后,将堆中对象引用赋值给str3,再将该对象指向常量池。...str4是两个常量相加,直接引用常量池中对象即可。

    32630

    Java 中变量类型、拆箱装箱及相互间转换

    虽然代码A处看起来是改变了counter值,但实际上是创建了另一个对象,并将方法counter参数引用指向了这个新创建对象,由于是不同引用,所以不会对方法外引用有任何影响。...,因为自动装箱IntegerCache类初始化时,生成了一个-128-127Integer类型常量池,如果值在此范围则不会再生成新对象 //逻辑表达式(e == f)为falsed,理由同上...一个 String 例子 这样就不难理解 String 不是基本数据类型,而是一个对象,但是需要注意是 String 可以直接赋值创建 StringBuilder 必须通过 new 来创建。...逻辑表达式s1 == s2为 true 因为String s1 = "abc"可能创建一个或不创建对象,如果 “abc” 这个字符串 Java String 池中不存在,则会在 JVM 字符串池中创建一个...建议:使用字符串、基本数据类型包装实例,进行使用直接复制,不是通过 new、包装类实例化,这样可以保证更好性能。

    52240

    c++从入门到进阶--引用与常量

    a=10;//const引用仅对自己可参与操作进行了限定对所指向对象本身不是常量未作限定。因为指向对象也可能不是const,所以允许通过其他途径改变它值。...引用本身不是对象所以不能定义引用引用。...; // 对stringstream而言,operator<< 是一直往字符串流中写字符,不是覆盖之前输入字符 cout << ss.str() <<endl; /*str()函数创建是一个临时...s1 : s2; } //函数返回结果不会真正复制对象,返回就是s1或s2本身。...存储类别 static静态存储 static对象控制流程第一次到达其定义点被初始化,如果没有提供初始值就被自动初始化为0; 函数后续调用中,初始化语句被跳过 静态对象函数被多次调用之间保持有效

    77120

    JDK1.8源码(三)——java.lang.String 类

    ⑤、堆:用来存储对象本身以及数组(当然,数组引用是存放在Java栈中)。    JDK1.7 以后,方法区常量池被移除放到堆中了,如下: ?   ...③、使用包含变量表达式创建String对象,则不仅会检查维护字符串池,还会在堆区创建这个对象,最后是指向堆内存对象。...“hello”存在,发现是没有的,于是常量池中创建“hello”对象,并将常量池中引用赋值给str1;第二个字面量 String str2 = "hello",常量池中检测到该对象了,直接将引用赋值给...str2;第三个是通过new关键字创建对象常量池中有了该对象了,不用在常量池中创建,然后堆中创建对象,并将堆中对象引用赋值给str3。...str4是两个常量相加,直接引用常量池中对象即可。 ?

    924110

    类编程WAF(下)

    变量 iWall3 中广义变量包括报文变量、环境变量和用户变量:报文变量和环境变量相当于编程语言中常量或传入参数,用户变量则是真正编程语言意义上变量,即用户可以自行创建使用和维护变量。...条件判断 iWall3 支持编程语言标准条件判断:即可以包含无限嵌套 if - then - else 条件,每个 if 条件又可以使用 and - or - not 逻辑运算符连接多个子条件。...表达式 iWall3 支持与通用编程语言一致表达式表达式常量、变量、运算符和内置函数组成,以模板字符串方式内嵌书写,可在条件判断、变量赋值、模式匹配、日志输出等任意位置使用。 [图2] 4....: 0:00am-8:00am 这一间段访问 admin.php ,部分规则紧急度将被设为 critical,异常权值则被设为 15。...如此,书写者能够对多个 HTTP 事务中同一主体应用规则 (如长时间拦截) 和共享数据 (如权重计算)。 四、有什么用 使用类编程 WAF,安全人员不再是规则使用者,变成了规则生产者。

    87410

    编码篇-iOS程序中内存分配 栈区堆区全局区等相关知识

    【先进后出】 alloc 堆上申请一块空间返回一个指针,这个指针栈上,申请空间堆上, 这里指局部变量不是对象地址,而是这个对象指针栈上。...,需要初始化一段动态内存空间,如:0x6a42a40; # initWithString 直接返回字符串常量地址,不是重新开辟一块内存空间。...一个问题:为什么我们定义NSString使用Copy不是 Strong strong和retain同义, weak和assign同义, 为什么要采用这种说法, 似乎是ARC出现后为了消除引用计数观念采用做法...浅拷贝和深拷贝 浅拷贝,只是拷贝了对象指针,不是拷贝对象本身。 深拷贝,是直接拷贝整个对象内存到另一块内存中。...所谓双指针(参数中传指针):就是新建一个对象p ,再创建一个指针p1指向p,然后再创建一个指针p2,p2保存了p1指针地址,取得p2指针内容,就是拿到了p1指针地址,然后对其指向进行修改.

    1.5K20

    阿里一面:如何将重复性比较高 String 类型地址信息从 20GB 降到几百兆?

    创建字符串两种方式: String str1 = “码哥字节”; String str2 = new String(“码哥字节”); 当代码中使用第一种方式创建字符串对象,JVM 首先会检查该对象是否字符串常量池中...第二种方式创建,在编译类文件,"码哥字节" 字符串将会放入到常量结构中,类加载,“码哥字节" 将会在常量池中创建调用 new ,JVM 命令将会调用 String 构造函数,堆内存中创建一个...str 属于方法栈字面量,它指向堆中 String 对象,并不是对象本。 对象在内存中是一块内存地址,str 则是指向这个内存地址引用。 也就是说 str 并不是对象只是一个对象引用。...这是因为 str 只是 String 对象引用,并不是对象本身。 真正对象依然还在内存中,没有被改变。...所以 a 和 b 引用是同一个对象。 字符串分割优化 split() 方法使用了正则表达式实现了其强大分割功能,正则表达式性能是非常不稳定

    10410

    Python学习笔记(二)

    赋值、不可变类型与可变类型 Python中一切皆对象,每一次赋值都是对象引用传递,部分类型是不可变引用,所以赋值实际是创建了新对象,引用新对象。...不可变对象 数字、字符串、元组等变量赋值,都是引用新对象 可变类型 List、Set、Dictonary等变量赋值,都是创建新引用,引用旧对象 正则表达式 通过引入Python模块re使用...分组,圆括号匹配过程只是起分组作用(使得括号正则表达式可以当成一个单位原子正则表达式),整个表达式匹配成功,会使用元组来分隔返回每个分组(圆括号)表达式各自匹配字符串 | 或者匹配,匹配被...因为是固定MRO顺序(从左往右),所以不会无限重复。...对于同一个对象,不断调用super就是先横向(左到右具备公共祖先父类),后纵向(到公共祖先类) 经典类与新式类 如果一个类是object子类,则他是新式类,否则为经典类,新式类匹配方法使用广度优先原则

    50330

    Python学习笔记整理(二)pytho

    长整型数(无限大小) 1.23,3,14e-10,4E210    浮点数 0177,0x9ff,0xFF        整数八进制和十六进制数常量 3+4j,2.0+3.0,3J...如果编写一个带有小数点或幂数字,Python会将它变成一个浮点数对象,并且当这个对象用在表达式,将启用浮点数(不是整数)运算法则。...二、Python表达式操作 表达式是处理数字最基本工具,当一个数字(或其他对象)与操作符相结合时,Python执行时将计算得到一个值。Python中表达式使用通常数学符号和操作符号写出来。...整数和浮点 20+1.4 最后结果类型为复杂数字类型 三、实际应用中数字 1、变量和基本表达式 python中,变量并不需要预算声明。但是使用之前,至少要被赋值一次值。...创建一个结合对象,将一个序列或其他迭代对象传递给内置set函数 >>> x=set('acd') >>> y=set('bed') >>> x set(['a', 'c', 'd'])

    69040

    【笔记】《C++Primer》—— 第2章

    之所以一旦创建就不可以改变,是由于const链接时会被编译器优化为指向内存固定常量区域变量,拥有同样值变量会被指向同一个const内存,且这块内存也有特别优化。...define比起const好处可能只有define可以用来快速得到计算式小函数之类 数组也可以使用const作为申请长度直接初始化 当需要在多文件中共享一个常量,最好做法是一个单独文件中定义一个...之别,但是实际上仔细从右到左分析const修饰就可以理解 我们有时候需要用const指向还没被计算出来常量表达式,但是巨大系统中有些表达式我们很难判定是不是常量表达式,C11引入了constexpr...关键之来强制指定一个表达式常量表达式不是无法通过检查 指针和引用都可以被定义为constexpr,但是指针初始值必须是0之类固定内存值 ?...关键字,他会使用其后括号函数/表达式返回类型来推导类型,且会保持顶层const和引用 要注意是如果表达式是decltype((x)),则返回类型永远是引用,没有双层括号才是按照x本身状态来判断

    52020

    《C++Primer》第二章 变量和基本类型

    初始化 含义:当对象创建获得了一个特定值:则我们说这个对象被初始化了initialized 初始化不等于赋值:初始化指的是创建变量赋予其一个初始值,赋值指的是把对象的当前值擦除并用一个新值替代...对于内置类型而言,定义于任何函数体之外变量被初始化为0,但是定义函数体内部内置变量将不被初始化 绝大多数类都支持无须显式初始化而定义对象,这样类提供了一个合适默认值,某些类要求每个对象都显式初始化...引用 C++11中新增了“右值引用”,而我们这里讲引用指的是“左值引用”。 引用必须初始化 引用本身并非对象,它是一个已经存在对象别名 因为引用本身不是对象,所以不能定义引用引用 2....顶层const 指针本身是一个对象,它又可以指向另一个对象。因此指针本身不是常量以及指针所指的是不是一个常量就是两个相互独立问题。...顶层const表示指针本身是一个常量,底层const表示指针所指对象不是一个常量。 当执行对象拷贝操作,拷入和拷出对象必须具有相同底层const资格。

    53610

    Java基础

    如果你知道一个对象是不可变动,那么需要拷贝对象内容就不用复制它本身只是复制它地址,复制地址(通常一个指针大小)需要很小内存,效率也很好。...存在大量自动装箱过程,如果装箱返回包装对象不是从缓存中获取,会创建很多新对象,比较消耗内存。 整型包装类 valueOf 方法返回对象常用取值范围,会返回缓存对象。...程序运行时候,被调用动态链接库函数被安置在内存某个地方,所有调用它程序将指向这个代码段。因此,这些代码必须使用相对地址,不是绝对地址。...引用传递一般是对于对象型变量而言,传递是该对象地址一个副本, 并不是对象本身。所以对引用对象进行操作会同时改变原对象。 18....生产者消费者模式 生产者消费者问题是线程模型中经典问题:生产者和消费者同一间段共用同一存储空间,生产者向空间里生产数据,消费者取走数据。优点:支持并发、解耦。

    1.3K10

    关于重构总结

    基本类型偏执 使用类往往比使用基本类型更好 switch 惊悚现身 面向对象多态概念可为此带来优雅解决方法 平行继承体系 每当为某个类增加一个子类,必须也为另一个类相应增加一个子类 冗余类 如果一个类没有做足够多工作...GUI控件中,领域对象函数需要访问这些数据 将单向关联改为双向关联 添加一个反向指针,并使修改函数同时更新两条连接 两个类都需要使用到对方特性 将双向关联改为单向关联 去除不必要关联 双向关联类变成单向依赖...以状态取代类型码 有一个不可变类型码,且会影响到类行为,但无法用继承手法消除 以字段取代子类 修改这些函数,使他们返回超类某个字段,然后销毁子类 当各个子类唯一差别只“返回数据常量函数身上...“控制标记”作用 以卫语句取代嵌套条件表达式 使用卫语句表现所有的特殊情况 当条件逻辑有太多嵌套,难以看清执行路径 以多态取代条件表达式 将条件表达式每一个分支放进一个子复写函数中,然后将原始函数声明为抽象函数...有一个条件表达式,根据对象类型不同选择不同行为时 引入Null对象 将null值替换为null对象 你需要再三检查某对象是否为null 引入断言 以断言明确表现这种假设 某一段代码需要对程序状态做出某种假设

    97910
    领券