C# 字面量null对于引用类型变量✓和值类型变量×

编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。

在C#中,字面量(literal)是指直接表示固定值的符号,比如数字、字符串或者布尔值。而关键字(keyword)则是由编程语言定义的具有特殊含义的标识符,用于表示语言的结构和语义。简而言之,字面量是值的表达方式,而关键字是语言的组成部分,用于定义语法和行为。

当我们谈到C#中的字面量时,我们指的是直接表示固定值的符号或文本。例如:

  • 整数字面量:`10`, `1000`, `-5`

  • 浮点数字面量:`3.14`, `2.718`, `-0.5`

  • 字符串字面量:`"hello"`, `"world"`, `"123"`

  • 布尔值字面量:`true`, `false`

这些字面量直接表示它们所代表的值,不需要进一步解释或计算。

而关键字是C#语言中具有特殊含义的标识符,用于表示语言的结构和语义。这些关键字是编程语言的一部分,有着固定的含义和用法。例如:

  • `class`:用于定义类。

  • `if`、`else`:用于条件语句。

  • `for`、`while`:用于循环语句。

  • `public`、`private`:用于定义成员的可访问性。

  • `static`:用于定义静态成员。

这些关键字在编写代码时具有特殊的含义和作用,它们用于定义程序的结构和行为,而不是直接表示值。

引用类型变量和字面量之间的联系在于变量可以指向字面量所代表的值。

在C#中,引用类型变量是指向对象的引用,而对象可以是在堆上分配的实例,比如类实例。当你使用一个引用类型变量时,你实际上是在操作该变量所引用的对象,而不是直接操作对象本身。

例如,假设有一个字符串类型的引用类型变量:

```csharp

string str;

```

你可以将该变量指向一个字符串字面量:

```csharp

str = "hello";

```

在这种情况下,变量 `str` 引用了一个存储在内存中的字符串对象,该字符串对象的值为 `"hello"`。因此,引用类型变量允许我们引用字面量所代表的值。

C#中的 `string` 是一个引用类型,而不是值类型。所以 `string str;` 定义的是一个引用类型变量 `str`,它可以引用(或指向)一个字符串对象。

在C#中,所有的类都是引用类型,包括 `string` 类。因此,当你声明 `string str;` 时,你在声明一个引用类型变量 `str`,它可以引用一个字符串对象。而这个字符串对象可以是一个字符串字面量,比如 `"hello"`。

对于值类型(value types)来说,如 `int`、`float` 等基本类型,它们的变量直接存储值,而不是引用。因此,区分引用类型和值类型的一个简单方法是,引用类型的变量存储的是对象的引用,而值类型的变量存储的是值本身。

在C#中,以下是一些常见的值类型:

  1. 整数类型:
  • `int`:32 位有符号整数。

  • `long`:64 位有符号整数。

  • `short`:16 位有符号整数。

  • `byte`:8 位无符号整数。

  • 等等...

  1. 浮点数类型:
  • `float`:32 位浮点数。

  • `double`:64 位浮点数。

  • `decimal`:128 位高精度十进制数。

  1. 字符类型:
  • `char`:16 位 Unicode 字符。
  1. 布尔类型:
  • `bool`:表示真或假。
  1. 枚举类型:
  • `enum`:用于定义枚举类型。
  1. 结构体类型(Structs):
  • 自定义的值类型,可以包含多个字段。

这些值类型的变量直接存储值本身,而不是引用,与引用类型相比,它们在内存中的存储方式和处理方式不同。

看到一个值类型/引用类型之辨较好注解:

【扩展概念】

看这个图产生疑问:

问了问chatgpt

值类型为什么都是seal的?(国产ai回答蛮好:

关于"所有值类型都是密封的吗?"这个问题:

【seal】建议先看最后俩图总结 不然有点子绕

chatgpt似乎对于sealed和中文概称密封强行理解了

【chatgpt迷惑行为】

起源:

可以为空的值类型nullable value types

相关推荐
Death2005 分钟前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
yufei-coder14 分钟前
C#基础语法
开发语言·c#·.net
长天一色14 分钟前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
yngsqq19 分钟前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
_.Switch26 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
醉颜凉28 分钟前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
NiNg_1_23434 分钟前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
带带老表学爬虫43 分钟前
java数据类型转换和注释
java·开发语言
XiaoLiuLB1 小时前
ChatGPT Canvas:交互式对话编辑器
人工智能·自然语言处理·chatgpt·编辑器·aigc
qianbo_insist1 小时前
simple c++ 无锁队列
开发语言·c++