字元串常量

字元串常量

字元常量是由一對單引號括起來的單個字元。不能將字元串常量與字元常量混淆。字元常量可以賦值給字元變數,如"char b='a';",但不能把一個字元串常量賦給一個字元變數,同時也不能對字元串常量賦值。它是編程語言中表示文本的數據類型,代表具有一定意義的信息,現實世界的大部分信息都以字元串的形式表示。在程序中,字元串常量會生成一個“指向字元的常量指針”。當一個字元串常量出現於一個表達式中時,表達式所使用的值就是這些字元所存儲的地址,而不是這些字元本身。

含義


常量的本質

字元串常量
字元串常量
不佔據任何存儲空間屬於指令的一部分,編譯后不再更改。
字元串常量是一對雙引號括起來的字元序列。
字元常量可以賦值給字元變數,如"char b='a';",但不能把一個字元串常量賦給一個字元變數,同時也不能對字元串常量賦值。
例如下面的是合法的字元串常量:
"how do you do.","CHINA","a","$123.45"“C language programming”、“a\\n”、“#123”、“ ”等為字元串常量
存儲:字元串中的字元依次存儲在內存中一塊連續的區域內,並且把空字元‘ \0’自動附加到字元串的尾部作為字元串的結束標誌。故字元個數為n的字元串在內存中應占(n+1)個位元組。
可以輸出字元串,例如:
printf("how do you do.");

概述

字元串是由零個或多個字元組成的有限序列。一般記為 s =“a1 a2…an”( n > =0) 。它是編程語言中表示文本的數據類型,代表具有一定意義的信息,現實世界的大部分信息都以字元串的形式表示。對於一種編程語言來說,字元串處理是許多需要進行的重要任務之一,如用戶程序輸入信息、程序向用戶顯示信息等。所以幾乎每一種編程語言都要有專門針對字元串的表示和操作。

關係


在程序中,字元串常量會生成一個“指向字元的常量指針”。當一個字元串常量出現於一個表達式中時,表達式所使用的值就是這些字元所存儲的地址,而不是這些字元本身。因此,你可以把字元串常量賦值給一個“指向字元的指針”,例如:char *a = "123" ; a = "abc";,後者指向這些字元所存儲的地址。
但是,你不能把字元串常量賦值給一個字元數組,因為字元串常量的直接值是一個指針,而不是這些字元本身。例如:char a;a = "a";就是錯誤的,報錯結果:invalid conversion from 'const char*' to 'char'。
例如:char a="love",的意思就是用字元串“love”來初始化字元數組a的內存空間,而數組的首地址也就是“love”字元串的地址。

創建


Java語言是純粹的面向對象的語言,所以它的字元串是用對象表示的,Java 語言的字元串分為字元串常量( 用 String 類的對象表示) 和字元串變數( 用 StringBuffer 類的對象表示) ,它們都位於java. lang 包中,他們除了能夠表示字元串外,還定義了很多專門進行字元串的處理方法。
和創建其它的任一種對象的方式相同,創建String 對象也需要調用它的構造方法來完成,如:String s = new String( “abc”) ; 也可用另一種直接賦值 的 方 式 來 創 建 String 對 象,如: String s =“abc”;雖然通過以上兩種方式都可以創建 String 對象,但是二者在創建對象時採用的內存分配方式是不同的。
如果是按照以下調用構造方法的形式來 創 建 String 對 象: String s1 = new String( “abc”) ; String s2 = new String( “abc”)。s1 和 s2 分別佔有獨立的內存空間,利用“= = ”相比較的話,則 s1 = =s2 的結果為 false。但是由於在程序中經常出現大量 String 對象的值相同的情況,造成內存空間的冗餘。
為了有效地利用內存,Java中預留了一塊特殊的內存區域,稱為 String 常量池。當編譯器遇到一個String 常量時,先檢查常量池中是否存在值相同的String常量,如果存在,則把該常量的引用指向常量池中的String常量。

字元常量比較


C語言允許使用字元串常量外,還允許使用字元常量。

與指針的關係


在程序中,字元串常量會生成一個“指向字元的常量指針”。當一個字元串常量出現於一個表達式中時,表達式所使用的值就是這些字元所存儲的地址,而不是這些字元本身。因此,你可以把字元串常量賦值給一個“指向字元 的指針”,例如:char *a = "123" ; a = "abc";,後者指向這些字元所存儲的地址。但是,你不能把字元串常量賦值給一個字元數組,因為字元串常量的直接值是一個指針,而不是這些字元本身。例如:char a[5];a[0] = "a";就是錯誤的,報錯結果:invalid conversion from 'const char*' to 'char'。
例如:char a[10]="love",的意思就是用字元串“love”來初始化字元數組a的內存空間,而數組的首地址也就是“love”字元串的地址。