关于var1=var2=something赋值语句的思考

2023-11-21 07:32

本文主要是介绍关于var1=var2=something赋值语句的思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

刚才在阅读《c#本质论》一书时,开头有提到var1=var2=something的赋值体,之前也曾用过(但是个人不建议这么使用),但是没有认真思考这种赋值方式的本质问题,即:var1是对var2的引用还是对something的引用。后面我编写了一些PoC代码对此进行验证。

代码片段1:

            #region TestStringstring str1, str2;//str1 = str2 = "This is a test string...";str2 = "This is a test string...";str1 = str2;Console.WriteLine("Str1: " + str1);Console.WriteLine("Str2: " + str2);str2 = "This is another test string...";Console.WriteLine();Console.WriteLine("Str1: " + str1);Console.WriteLine("Str2: " + str2);#endregion

 输出的结果是:

Str1: This is a test string...
Str2: This is a test string...

Str1: This is a test string...
Str2: This is another test string...

还是

Str1: This is a test string...
Str2: This is a test string...
Str1: This is another test string...
Str2: This is another test string...

呢?

测试答案是前者。

 

再看看片段2:

class Program{static void Main(string[] args){#region TestObjectObjectToTest ott1, ott2;//ott1 = ott2 = new ObjectToTest(100);ott2 = new ObjectToTest(100);ott1 = ott2;Console.WriteLine("OTT1: " + ott1.Num);Console.WriteLine("OTT2: " + ott2.Num);ott2 = new ObjectToTest(150);Console.WriteLine("OTT1: " + ott1.Num);Console.WriteLine("OTT2: " + ott2.Num); #endregionConsole.Read();}}class ObjectToTest{int num;public int Num{get { return num; }set { num = value; }}public ObjectToTest(int num){Num = num;}}

 

输出结果又是如何呢?这里的ott1和ott2都是对象,也就是涉及到引用传递的问题了。我们记new ObjectToTest(100)为obj1, new ObjectToTest(150)为obj2.则在语句ott1=ott2执行后,ott1是对ott2的引用,还是对obj1的引用呢?在后面当ott2=new ObjectToTest(150)执行后,ott1是对obj1的引用还是对obj2的引用呢?

 

执行代码,观看结果为:

OTT1: 100
OTT2: 100
OTT1: 100
OTT2: 150

可知,这里的ott1只是对obj1的引用,而非obj2的引用。

这篇关于关于var1=var2=something赋值语句的思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400814

相关文章

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语