字符和字符串你不知道的东西

createh52周前 (12-14)技术教程13

单个字符(一般被''包围)和单个字符的字符串(一般被'包围)看起来很像,实则可能天差地别。脚本语言可以把任何字面量看成字符串,它的处理更简单优雅,对于编译型语言,程序员必然要面对差异。


字符类型用什么形式表示?

字符类型和普通整型、标识符不同,它必须用特别的形式以区分开。

  • 单引号

C/ObjC/C++/Java/C#
例如'ab'是不合法的。

  • 单引号或者双引号

Python/Shell/SQL/JS/PHP/Fortran


字符和字符串单引号还是双引号?

  • C/C++单个字符char类型本质就是整型,单个字符的字符串代表指针或者地址,指向此字符串。
  • Java/C#延续C/C++的精神,只是字符串被当成引用类型(本质还是地址)。
  • Python对于单引号'和双引号"包裹的字符看成一样,被当做字符串处理。
  • Shell脚本单引号和双引号都代表字符串,但单引号会完全当原本的字符串,双引号内部的变量和命令会被展开。
  • SQL语言不区分单引号和双引号。
  • JavaScript对于字符串类型,不区分单引号和双引号。
  • PHP默认可以用双引号或单引号包裹字符串,为了方便,双引号里面包含单引号字符不需要转义;单引号包裹字符串,内部的任何字符原文输出,注意,内部字符串还包含单引号就必须转义。
  • 更为古老的Fortran语言,字符串用单引号和双引号包起来是相同含义,字符类型其实是字符串长度为1的实现:CHARACTER(LEN=1).

character(2) :: str = "ab"和character(2) :: str = 'ab'都代表字符串ab.
Fortran还可以用nHxxxx格式表达字符串,例如str = 6HHello代表字符串"Hello".


字符的输出形式

  • C/ObjC/C++可以用字符也可以用整数展示,分别对应%c, %d.


'a'和"a"的区别

  • 在单引号表示字符,双引号标识字符串的语言中,二者是截然不同的类型。
  • 假设语言兼容ASCII码,C/ObjC/C++ 'a'仅仅是单字节字符,"a"包含字符'a'和'\0'两个字符。
  • 对于单引号和双引号功能一样的语言,二者没区别。
  • C语言 printf('a') 的结果是未知的,因为'a'是个整数,而非字符串地址。


多个字符的字符类型

  • 早期一些C语言编译器允许形如 '123' 这种的字符定义,实际上的数值可能是第一个字符,或者最后一个字符。但这些都不重要,不要试图在当今的C编译器写上面的代码。








若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关文章

一文教你Java字符串处理(String,StringBuffer,StringBuild)

前言本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获。本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获!再言字符串的分类在java.lan...

一文带你吃透Java代码执行过程:JVM加载字节码+解释执行+编译执行

Java代码执行过程简介前面介绍了C/C++代码编译执行的过程,以及C++编译器如何支持面向对象的特征。本节简单介绍Java代码执行过程,JVM在执行Java代码时所做的工作,以及JVM是如何设计的。...

Why String is immutable in Java?

Why String is immutable in Java?String is immutable in Java. An immutable class is simply a class wh...

Rust语言里的字符串string

每一种编程语言都需要处理字符串,Rust编程语言里牵涉到字符串处理的有原始类型str以及string结构体。str一般有两种叫法,一是字符串切片,另一个是字符串字面量。常出现的形式有&str,...

Java中的枚举,这一篇全了,一些不为人知的干货

Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全性。enum关键字是Java中的保留关键字。在编译或设计时,当我们知道所有变量的可能性...

JDK9为何要将String的底层实现由char「」改成了byte「」?

如果你不是 Java8 的钉子户,你应该早就发现了:String 类的源码已经由 char[] 优化为了 byte[] 来存储字符串内容,为什么要这样做呢?开门见山地说,从 char[] 到 byte...