精华内容
下载资源
问答
  • 1. 字符常量是单引号括起来的一个字符 2. 字符常量是双引号括起来的0个或多个字符 含以上: 1. 字符常量相当于一个整型值(ASCII值),可以参加表达式运算 2. 字符常量代表一个地址值(该字符串在内存中的存放...

    形式上:
    1. 字符常量是单引号括起来的一个字符
    2. 字符串常量是双引号括起来的0个或多个字符

    含以上:
    1. 字符常量相当于一个整型值(ASCII值),可以参加表达式运算
    2. 字符串常量代表一个地址值(该字符串在内存中的存放位置)

    占内存大小:
    1. 字符常量只占2个字节
    2. 字符串常量占多个字节
    注意:char在Java中占两个字节

    字符封装类 Character 有个一成员常量 Character.SIZE 值为16,单位是 bites,该值除以8(1byte = 8bits)后就得到2个字节

    在这里插入图片描述

    在Java语言中,中文字符所占字节数取决于字符的编码方式:

    1. 一般情况下,采用ISO8859-1编码方式时,一个中文字符和一个英文字符一样只占1个字节;

    2. 采用GB2312或GBK编码方式时,一个中文字符占2个字节;

    3. 采用UTF-8编码时,个中文字符占3个字节

    我们可以通过String类的getBytes(String charsetName)方法获取到字符串以指定编码方式编码后所得到的字节数组,字节数组的长度就是字符串在指定编码方式下所占的字节数。

    "测试".getBytes("ISO8859-1".length
    "测试".getBytes("GB2312".length
    "测试".getBytes("GBK".length
    "测试".getBytes("UTF-8".length
    

    执行结果:
    2
    4
    4
    6

    关于编码格式的详细介绍,下面这篇博文很详细:
    一个中文字符占多少个字节

    展开全文
  • 字符型常量

    千次阅读 2010-06-11 22:52:00
    (1)哪些是字符型常量。BCA,"a"B,'//'C,'W'D,''结果是:A是字符串;B是字符,以%C输出是/,可见第一个/是转义符号;C是字符;D不是,两个引号间啥都没有。(2)哪些是字符型常量。BCDA,CH =‘a+b’;B,CH=’/0...

    (1)哪些是字符型常量。BC

    A,"a"
    B,'//'
    C,'W'
    D,''
    结果是:A是字符串;B是字符,以%C输出是/,可见第一个/是转义符号;C是字符;D不是,两个引号间啥都没有。

    (2)另一个字符串样例程序:
    #define CFilePath  "C://RESOURCE//"
    int main(int argc, char* argv[])

         char pata[]=CFilePath         "IBD//";
         printf("%s",pata);
         return 0;
    }
    输出:C:/RESOURCE/IBD/。因为//输出是/,两个字符串中间的空格省略掉。

    展开全文
  • 前文介绍了一些基本的数据常量,这里我们主要来接触字符常量字符常量。 首先,是最小单位的常量boolean常以及最简单的字符常量。 布尔类型常量只有true和false两个值,常用的赋值方式如 bool test=false; ...

    前文介绍了一些基本的数据常量,这里我们主要来接触字符常量和字符串常量。

    首先,是最小单位的常量boolean常以及最简单的字符常量。

    布尔类型常量只有true和false两个值,常用的赋值方式如 bool test=false;

    字符常量分为可显示的字符常量和不可显示的字符常量:
     1. 可显示的字符常量写在一对单引号之间,如'a'、 '2'、 ','、 ' '等。这些字符常量是默认为char的,如果要定义wide-charater,我们要在定义的字符前加上L,如 L'a'。

    2. 不可显示的字符常量,主要是一些Escape Sequences(转义序列)。不可显示的字符常量及不会显示在程序的运行结果中,如空格、换行等。我们在编写这些操作的时候,通常用到转义序列,由一个反斜杠(\)开始,下面介绍一些在C++中常用的专业序列:

      newline  \n  alter(bell)  \a
     horizontal tab  \t  backslash  \\
     vertical tab  \v  question mark  \?
     backspace  \b  single quote  \'
     carriage return  \r  double quote  \"
     formeed  \f  


     

    当然,我们可以用这个格式来书写其他的转义序列,如 \000,这里的000代表三个八进制数字,八进制数字的值代表这个字符的十进制的值。

    下面列举的是一些用ASCⅡ字符来表示的字面常量:

      \7  (bell)  \12  (newline)  \40  (blank)
     \0  (null)  \62  ('2')  \115  ('M')


     

    同样,我们也可以利用十六进制的转义字符来表示一些字面常量,如 \xddd。

    —————————————————————————————————————————————————

     前面介绍的字面常量都是由基本的内建型数据类型构成的,下面是关于字符串字面常量的一些介绍,这要更加复杂。字符串常量是由字符常量组成的阵列,他是在双引号中的字符常量,可以有零个或者更多个字符组成,也可以由转义序列组成。并且,正如wide charater literal,字符串也可以通过加上“L”前缀来定义。

     为了与C兼容,C++的程序中会附加一个字符以配合那些C程序员输入的字符。每一个字符串的结尾都会由编译器附加一个null字符,及“\0”。

    —————————————————————————————————————————————————

    有字符串联,那么也就有字符串串联了。下面我们介绍串联字符串的表示方法。

    串联字符串常量,就是由几个相邻的仅被空格、标记符(tab)或者换行符隔开的string literals(or wide string literals)组成。这种用法便于将很长的字符串分解成不同的行以方便定义及解读。如下:

    std::cout<<"a multi-line"
    
               "string literal"
    
               "using concatenation"
    
              <<std::endl;
    

    当这段程序被执行的时候,就会显示出:
     a multi-line string literal using concatenatiion

    很简单的表达,但是,如果把一个string literal和一个wide string literal串联,该怎么办呢?

    std::cout<<"multi-line" L"literal"<< std::endl; //Concatenating plain and wide character string is undefined

    如果我们像上面这样把一个无格式的string literal和一个wide string literal串联在一起,那么结果就如注释所说,是不合法的。其实在部分编译器中,这个写法是可以的,但是很多的编译器并不能识别这种写法,因此,我们在进行程序的编写是,不要将两种不同类型的字符串串联在一起。

    ——————————

     当然,还有一种更简单(或者说没有多大用途)的方法来处理这些比较长的字符串,就是通过在字符串的行末加上“\”。这样,下一行的内容我们会认为跟这一行一在同一个字符串内的。如下:

    //A"\"before a new line ignores the line break
    
    std::cou\
    
    t<< "Hi"<<st\
    
    d::endl;
    

    上面的语句和下面语句的作用是一样的

    
    
    std::cout<< "Hi"<<std::endl;
    


    那么,我们就可以把一个很长的字符串常量通过“\”来隔开:

    std::cout<< "a multi-line \
    
    string litreral \
    
    using a backslash"<<std::endl;
    

     需要注意的是,利用反斜杠来分行的时候一定要把反斜杠写在每一行的最后(在反斜杠后面不能有注释或者空格),同样,下一行的文字不能有缩进,因为下一行的所有内容都是包括在这个字符串内的。

    这几篇讲述了基本的数据类型和一些常量的表示方法,后面,我们会接触到变量的一些表示方法。

    展开全文
  • Java进阶——Java中的字符常量

    千次阅读 2018-05-31 00:51:49
    实际上还有整型常量池、浮点型常量池等等。字符串常量池存放的是对象的引用,而不是对象。Java中字符串对象创建有两种形式:字面量形式和创建对象形式。 1、字面量形式 字面量的体现形式String str = &amp;amp...

    字符串常量池

    JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内存,这段内存被成为字符串常量池(方法区中)。实际上还有整型常量池、浮点型常量池等等。字符串常量池存放的是对象的引用,而不是对象。Java中字符串对象创建有两种形式:字面量形式和创建对象形式

    1、字面量形式

    字面量的体现形式String str = "Hello",简单理解为去字符串常量池中拿对象的引用

    当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用

    2、创建对象形式

    创建对象的体现形式String str = new String("Hello");,简单理解为直接在堆内存空间中创建新的对象

    当代码中出现了new来构造字符串对象的时候,不管字符串常量池中有没有相同内容的对象的引用,首先它都会去创建这个字符串对象,这里字符串对象指的是String对象,String对象存放在堆当中。然后它会去字符串常量池寻找Hello这个字符串,其处理的结果同字面量形式。最终str引用指向String对象的引用

    字符串对象创建

    1、String str = new String(“abc”) 创建多少个对象?2个

    1. 在常量池中查找是否有”abc”对象,有则返回对应的引用实例,没有则创建对应的实例对象(1个)
    2. 在堆中 new 一个 String(“abc”) 对象(1个)
    3. 将对象地址赋值给str,创建一个引用

    2、String str = new String(“A”+”B”)创建多少个对象?4个

    1. 在常量池中查找,字符串”A”,”B”,”AB”(3个)
    2. 在堆中 new 一个 String(“AB”) 对象(1个)
    3. 将对象地址赋值给str,创建一个引用

    问题抛出

    问:求解下面的输出语句的结果并解释原因

    String s1 = "Hello";
    String s2 = "Hello";
    String s3 = "Hel" + "lo";
    String s4 = "Hel" + new String("lo");
    String s5 = new String("Hello");
    String s6 = s5.intern();
    String s7 = "H";
    String s8 = "ello";
    String s9 = s7 + s8;
    
    // == :比较两个对象是否为同一对象
    System.out.println(s1 == s2);  // true
    System.out.println(s1 == s3);  // true
    System.out.println(s1 == s4);  // false
    System.out.println(s1 == s9);  // false
    System.out.println(s4 == s5);  // false
    System.out.println(s1 == s6);  // true

    问题分析

    1、s1==s2

    s1和s2在赋值时,均使用的字符串字面量。在编译期间,这种字面量会直接放入常量池中,从而实现复用。在载入运行时常量池后,s1和s2指向的是同一个内存地址

    2、s1==s3

    s3是动态拼接出来的字符串,但是所有参与拼接的部分都是已知的字面量。在编译期间,这种拼接会被优化,编译器直接帮你拼好,因此s3会被优化成String s3 = "Hello"

    3、s1==s4

    s4是动态拼接出来的字符串,但new String("lo")这部分不是已知字面量,是一个不可预料的部分。在编译期间,编译器不会优化,必须等到运行时才可以确定结果

    4、s1==s9

    s7和s8在赋值的时候使用的字符串字面量,但是拼接成s9的时候,s7和s8作为两个变量,都是不可预料的。编译器毕竟是编译器,不可能当解释器用,所以不做优化。等到运行时,s7和s8拼接成的新字符串,在堆中地址不确定,不可能与方法区常量池中的s1地址相同

    5、s4==s5

    s4和s5都创建出了字符串对象,两者都存在于堆中,但地址不相同

    6、s1==s6

    对于使用new创建的字符串对象,如果想将这个对象的引用加入到字符串常量池,可以使用intern方法。调用intern后,首先检查字符串常量池中是否有该对象的引用,如果存在,则将这个引用返回给变量,否则将引用加入并返回给变量。很显然,s1和s6都已经是字符串常量池中的一员,且值是相等的,所以引用的地址也相等

    展开全文
  • c++ 字符常量

    2015-08-20 11:45:29
    字符常量,之所以称之为常量,因为它可一看作是一个没有命名的字符串且为常量,存放在静态数据区。 这里说的静态数据区,是相对于堆、栈等动态数据区而言的。 静态数据区存放的是全局变量和静态变量,从这一点上...
  • 关于C语言的字符常量和符号常量

    万次阅读 多人点赞 2018-11-02 21:09:48
    C语言的字符常量和符号常量符号常量字符常量 符号常量 #define指令可以把符号名定义为一个特定的字符串: #define 名字 替换文本 在该定义之后,程序中出现的所有#define中定义的名字(既没有被引号引起来,也不是...
  • 字符常量

    千次阅读 2009-08-06 10:11:00
    写代码的时候,发现对字符常量改变的问题。网上找了一下资料,明白了出处:http://blog.csdn.net/andylyc/archive/2008/01/16/2046225.aspx 请在(且只能在TC2.0)中运行下面代码,先不要看结果,想想会得到什么...
  • 最近在看JVM, 常量池, 运行时常量池,字符常量池 这个看的有点懵. 整理一下. class常量池是在编译的时候每个class都有的. 在编译阶段,存放的是常量的符号引用。 [在class文件中.] 字符常量池在每个VM中只有...
  • C++常量(C++数值常量字符常量、符号常量) 一、 数值常量 数值常量就是通常所说的常数。在C++中,数值常量是区分类型的,从字面形式即可识别其类型。 1. 整型常量(整数)的类型 在上一节中已知道: 整型数据...
  • 关于C语言数值常量字符常量

    千次阅读 多人点赞 2019-08-12 16:22:36
    在C语言中,字符常量有以下特点:  ...但数字被定义为字符型之后就不能参与数值运算。 下面四个选项中,均是正确的数值常量或字符常量的选项是()。 A.0.0 0f 8.9e ‘&’ B.“a” 3.9e-2.5 lel ‘\”’ C.’3...
  • 下面的程序运行的时候出现段错误:char * str = "hello world"; (*str) += 32;原因:初始化时候虽然str是指针,但是指针指向的字符串“hello world”是常量,不能对常量进行修改。
  • 字符常量的存储区

    千次阅读 2014-05-26 23:24:23
    字符常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中? 比如: char *pstr="hello world!"; 这里,"hello world!"是一个字符常量, pstr是在栈中的变量。 我想问,字符常量,在...
  • C语言中字符常量存储

    千次阅读 2016-12-13 10:20:19
    局部变量、静态局部变量、全局变量、全局静态变量、字符常量以及动态申请的内存区 1、局部变量存储在栈中 2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区 3、new申请的内存是在堆中 4、字符串...
  • 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着来区分一下这几个...
  • 你也许会惊讶,字符型,以及我们将在下两小节讲述到的宽字符型和布尔型,在C++标准中都被归纳为整型。我把他们分开讲述是因为他们或多或少有一些和上一节提到的整型不太一样的性质。C++的最基本字符型是char(源自...
  • 字符常量到底存放在哪个存储区 2013年02月23日 16:57:57 若水三千你是一千 阅读数 40499更多 分类专栏: c语言 字符常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中? 比如: char *pstr=“hello...
  • 字符常量及其存放位置

    千次阅读 2014-11-14 16:43:18
    局部变量、静态局部变量、全局变量、全局静态变量、字符常量以及动态申请的内存区 1、局部变量存储在栈中 2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区 3、new申请的内存是在堆中 4、字符串...
  • SAS 基础 字符常量

    2018-05-23 14:41:50
    字符常量字符常量由1到32 767个...在下面的SAS语句中,Lily是一个字符常量。if name='Lily' then do;如果字符常量包括单引号,则将该常量放入双引号中。例如,为了指定字符值Lily's,使用下面的形式:if name="...
  • 写得很好的总结~ ... 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符。 如在代码中写"abc",那么编译器帮你存储的是"abc\0...2. "abc"是常量吗?-----------注意字符串的存储形式 答案是有...
  • 字符常量 的理解

    千次阅读 2011-07-29 11:17:47
    常量存储总结 局部变量、静态局部变量、全局变量、全局静态变量、字符常量以及动态申请的内存区1、局部变量存储在栈中2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区3、new申请的内存是在堆中4、...
  • 字符常量到底存在哪了?

    千次阅读 多人点赞 2017-09-29 11:34:15
    局部变量、静态局部变量、全局变量、全局静态变量、字符常量以及动态申请的内存区 1、局部变量存储在栈中 2、全局变量、静态变量(全局和局部静态变量)存储在静态存储区 3、new申请的内存是在堆中 4、字符...
  • 在c语言中我们经常会认为字符常量字符数组是一样的,但实际上这两者有着本质的区别。 下面我么以一个例子来进行说明。  #include void mian() { printf("HelloWorld\n"); }当中的“HelloWorld\n”实际上代表...
  • 一、字符数组与字符串 首先来看一段源代码: #include &lt;stdio.h&gt; ... char arr[10] = {'a','b','c'};...//不是字符串,因为没有'\0' char crr[10] = {"abc"};//字符数组特有 char drr[10] ...
  • Java字符常量详解

    千次阅读 2017-08-06 17:03:49
    在Java程序中经常会遇到类似于"Hello"这样地字符串,那么这种类型的字符串是Java中是如何存储,下面就来讨论一下字符常量在内存中的存储方式    Java程序在编译时会将程序中出现的常量(包括:char、byte...
  • 我们说的常量指的是一种不变的值,如(1;5;132.23等) 符号常量指的是被定义的常量,在C语言中用一个标识符来替代一个常量,...字符常量指的是字符,(如‘a’,‘f’等),当使用字符常量时要记得使用单引号 ...
  • 字符常量放在静态存储区

    千次阅读 2012-08-19 09:37:02
    书上说: "chenxi"这个字符串被当作常量而且被放置在此程序的内存静态区。 那一般的int i=1; 1也是常量,为什么1就不被放置在此程序的内存静态区了呢? 请高手指点! 所有的字符常量都被放在静态内存区 因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,411
精华内容 41,364
关键字:

下面不是字符型常量