精华内容
下载资源
问答
  • 字符串常量,顾名思义就是多个“字符”串在一起,字符串常量是用“双撇号”括起来的多个字符的序列 ****** 只要是“双撇号”括起来的,就算只有一个字符也叫字符串,如"a" 下列为字符常量的是() A. "a" B. 'ab' C....

    字符常量是由一对单撇号括起来的单个字符

    字符串常量,顾名思义就是多个“字符”串在一起,字符串常量是用“双撇号”括起来的多个字符的序列

    ****** 只要是“双撇号”括起来的,就算只有一个字符也叫字符串,如"a"

    下列为字符常量的是()
    A. "a"  B. 'ab'  C. '\n' D. b
    

    解析:
    这里 A带双撇号,肯定就是字符串常量了
    B带单撇号,但是并不是单个字符
    D单双都不带,所以肯定不是

    展开全文
  • 字符串常量

    千次阅读 2016-12-12 20:19:51
    写出下列程序的输出结果 ...s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。 编译能够通过,但是运行期间会发生

    写出下列程序的输出结果

    char* s="AAA";\

    printf("%s",s);

    s[0]='B';

    printf("%s",s);

     

    正确答案:AAA段错误 

    "AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的

    编译能够通过,但是运行期间会发生段错误

     

    这道题考的是字符串变量与字符串常量的知识点。

    字符串常量:括在一对双引号之内的字符序列称为字符串常量。例如:”HelloWorld”,”a”,”abc\n\t”,他们是不可以改变的。例如,char *p=”hello” 如果你试图改变指针所指向的内容是会报错的。例如(*p) = ‘h’; 运行报错

    因为字符串常量是放在静态存储区的,这部分内容是不能被修改的

    字符串变量,C中没有这个概念,C中如果想将一个字符串放到变量中,必须用字符数组,就是用一个字符型数组存放一个字符串。例如char data[10] = “char”;这时它是可以改变的。例如data[0] = ‘m’;这种操作时可以的。

    使用字符串常量的好处:节省内存,多个相同的字符串常量只需要使用一个字符串就可以了。

    展开全文
  • 字符串常量

    2017-05-31 16:41:25
    首先理解,如何在Java语言中如何创建字符串。在Java语言中有两种方式创建一个字符串对象 使用new运算符 String str = new String("hello"); StringBuilder str = new StringBuilder("Hello&...

    首先理解,如何在Java语言中如何创建字符串。在Java语言中有两种方式创建一个字符串对象

    1. 使用new运算符

      String str = new String("hello");
      StringBuilder str = new StringBuilder("Hello");
      StringBuffer str=  new StringBuffer("hello");
    2. 使用字符串常量或者常量表达式

      String str = "Hello"; //字符串常量
      String str = "Hel" + "lo"; //字符串常量表达式

    这些字符串的创建方式之间的区别: 在Java中,equals方法被认为是对对象的值进行深层比较,而’==’运算符被认为是浅层比较equals方法比较的是两个对象的内容而不是引用==运算符则不同,如果是引用类型(例如,对象),如果两个对象的引用相同,也就是两个对象的引用指向相同的对象内存空间,则两个对象相等;如果是基本类型(例如,原语),如果过两个对象的值相等,则它们的之相等。equals方法将会返回true, 如果两个对象的内容相同。但是对于java.lang.Object类而言,默认的equals方法,如果一个类没有复写它,该方法在两个对象的引用指向同一个对象,也就是说如果两个对象的引用指向相同的内存空间,那么将返回true。
    我们看以下例子:

    public class DemoStringCreation {
      public static void main (String args[]) {
        String str1 = "Hello";  
        String str2 = "Hello"; 
        System.out.println("str1 and str2 are created by using string literal.");    
        System.out.println("    str1 == str2 is " + (str1 == str2));  
        System.out.println("    str1.equals(str2) is " + str1.equals(str2));  
        String str3 = new String("Hello");  
        String str4 = new String("Hello"); 
        System.out.println("str3 and str4 are created by using new operator.");    
        System.out.println("    str3 == str4 is " + (str3 == str4));  
        System.out.println("    str3.equals(str4) is " + str3.equals(str4));  
        String str5 = "Hel"+ "lo";  
        String str6 = "He" + "llo"; 
        System.out.println("str5 and str6 are created by using string constant expression.");    
        System.out.println("    str5 == str6 is " + (str5 == str6));  
        System.out.println("    str5.equals(str6) is " + str5.equals(str6));
        String s = "lo";
        String str7 = "Hel"+ s;  
        String str8 = "He" + "llo"; 
        System.out.println("str7 is computed at runtime.");     
        System.out.println("str8 is created by using string constant expression.");    
        System.out.println("    str7 == str8 is " + (str7 == str8));  
        System.out.println("    str7.equals(str8) is " + str7.equals(str8));
      }
    }

    输出结果:

    str1 and str2 are created by using string literal.
        str1 == str2 is true
        str1.equals(str2) is true
    str3 and str4 are created by using new operator.
        str3 == str4 is false
        str3.equals(str4) is true
    str5 and str6 are created by using string constant expression.
        str5 == str6 is true
        str5.equals(str6) is true
    str7 is computed at runtime.
    str8 is created by using string constant expression.
        str7 == str8 is false
        str7.equals(str8) is true

    使用相同的字符序列而不是使用new关键字创建的两个字符串会创建指向Java字符串常量池中的同一个字符串的指针。字符串常量池是Java节约资源的一种方式。

    字符串常量池

    字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价。JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化。为了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池。如果字符串已经存在池中,就返回池中的实例引用。如果字符串不在池中,就会实例化一个字符串并放到池中。Java能够进行这样的优化是因为字符串是不可变的,可以不用担心数据冲突进行共享。
    例如:

    public class Program
    {
        public static void main(String[] args)
        {
           String str1 = "Hello";  
           String str2 = "Hello"; 
           System.out.print(str1 == str2);
        }
    }

    输出结果:

    true

    如果使用 String a = new String("Hello"); 。该字符串对象将会在字符串常量池外也就是Java 堆中进行创建,即使字符串常量池中存在相同的字符串。考虑到这些,我们需要避免使用new创建一个字符串,除非你明确的直到必须要这么做。例如下列代码

    public class Program
    {
        public static void main(String[] args)
        {
           String str1 = "Hello";  
           String str2 = new String("Hello");
           System.out.println(str1 == str2);
           System.out.println(str1.equals(str2));
        }
    }

    输出结果为:

    false 
    true

    这里我们需要知道。JVM中拥有一个常量池,任何字符串至多维护一个对象。字符串常量总是指向字符串常量池中的一个对象。通过new操作创建的字符串对象不指向字符串常量池中的任何对象,而是在Java堆中创建相应的对象,但是可以通过使用intern()方法来指向或在常量池中创建一个同值的字符串对象。java.lang.String.intern()返回一个保留池字符串,也即是在全局字符串常量池中拥有一个入口。如果该字符串以前没有存在于字符串常量池中,那么它就会被添加到池中。
    例如下列代码:

    public class Program
    {
        public static void main(String[] args)
        {
            // Create three strings in three different ways.
            String s1 = "Hello";
            String s2 = new StringBuffer("He").append("llo").toString();
            String s3 = s2.intern();
            // Determine which strings are equivalent using the ==
            // operator
            System.out.println("s1 == s2? " + (s1 == s2));
            System.out.println("s1 == s3? " + (s1 == s3));
        }
    }

    结果为:

    s1 == s2? false
    s1 == s3? true

    为了优化空间,运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用。这就意味着它们一直引用着字符串常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收。

    Java语言规范第三版中的字符串常量

    每一个字符串常量都是指向一个字符串类实例的引用。字符串对象有一个固定值。字符串常量,或者一般的说,常量表达式中的字符串都被使用方法 String.intern进行保留来共享唯一的实例。
    例如:

    public class Hello {
        public static void main(String[] args) {
            String hello = "Hello", lo = "lo";
            System.out.println((hello == "Hello") + " ");
            System.out.println((Other.hello == hello) + " ");
            System.out.println((other.Other.hello == hello) + " ");
            System.out.println((hello == ("Hel"+"lo")) + " ");
            System.out.println((hello == ("Hel"+lo)) + " ");
            System.out.printlnln(hello == ("Hel"+lo).intern());
        }
    }
    class Other { static String hello = "Hello"; }

    输出结果:

    true
    true
    true
    true
    false 
    true

    以上例子说明了
    - 同一个包下同一个类中的字符串常量的引用指向同一个字符串对象;
    - 同一个包下不同的类中的字符串常量的引用指向同一个字符串对象;
    - 不同的包下不同的类中的字符串常量的引用仍然指向同一个字符串对象;
    - 由常量表达式计算出的字符串在编译时进行计算,然后被当作常量;
    - 在运行时通过连接计算出的字符串是新创建的,因此是不同的;
    - 通过计算生成的字符串显示调用intern方法后产生的结果与原来存在的同样内容的字符串常量是一样的。


    本文参考翻译于http://www.xyzws.com/Javafaq/what-is-string-literal-pool/3

    展开全文
  • 思考下列表达式代表什么意思??? 1:“zyh_helen”+ 1 2: *“zyh_helen” ...当一个字符串常量出现在表达式中时,他的值是一个指针常量。编译器把这些指定字符的一份拷贝存储在内存中的某个位置,并存
    思考下列表达式代表什么意思???
    //1:“zyh_helen”+ 1
    //2: *“zyh_helen”
    //3:“zyh_helen”[2]。


    如果你觉得上述表达式不了解,甚至认为他们看上去像垃圾的话,你有必要阅读本篇文章
    首先对“字符串常量”这个话题进行深入的讨论:
    当一个字符串常量出现在表达式中时,他的值是一个指针常量编译器把这些指定字符的一份拷贝存储在内存中的某个位置,并存储一个指向第一个字符的指针。
    你可能会联想到,当数组名用于表达式中时,他们的值也是指针常量(例如:int a[10],a++ ++a --a a--都是不合法的),但是我们可以对他们进行下标引用、间接访问以及指针运算。这些操作对于字符串常量是否也有意义呢?

    答案是肯定的,如下所示:
    1:“zyh_helen”+ 1  ,字符串出现在表达式中时,他的值是一个指针常量,指向字符串中的第一个字符(知道字符串常量实际是一个常量指针,该问题就迎刃而解了)-->“指针加1”,结果仍是一个指针,它指向字符串中的第2个字符。
    2:*“zyh_helen”,对指针进行间接访问操作,其结果就是指针所指的内容,字符串常量的类型是“指向字符的指针”,结果即为它所指向的字符‘z’
    3:“zyh_helen”[2],该表达式的值即为字符:‘h’

    你可能会问起,人们什么时候会使用上面这些形式的表达式呢?下面的例子是一个很好的解释

    已下程序实现:无符号十进制数转化为16进制,并且打印出来
    方式一:
    void int_to_hex1(unsigned int n)
    {
    	char array[8];
    	int count = 0;
    	while (n)
    	{
    		array[count++] = n % 16;
    		n >>= 4;
    	}
    	for (int i = count - 1; i >= 0; --i)
    	{
    		if (array[i] <= 9)
    			printf("%d", array[i]);
    		else
    			cout << array[i]-10+'A';
    	}
    	cout << endl;
    }

    方式二:
    void int_to_hex3(unsigned int n)
    {
    	char array[8];//32位二进制--->8位16进制(最多需要)
    	int count = 0;
    	while (n)
    	{
    		array[count++] = "0123456789ABCDEF"[n % 16];
    		n >>= 4;
    	}
    	for (int i = count - 1; i >= 0; --i)
    	{
    		cout << array[i];
    	}
    	cout << endl;
    }
    
    显然方式一得代码比较复杂,因为字母和数字在字符集中并不是相邻的,方式二定义了一个字符串,使子母和数字相邻,从而避免了这种复杂性,余数将在字符串中选择一个正确的数字。
    方式二比传统的方式要快,因为它所需要的操作更少,但是,它的代码并不一定比原来的方法更小,虽然指令减少了,但它付出的代价是多了一个17个字节(‘\0’不要忽略了)的代价。

    下面例子也是字符串常量的一个应用:(统计一个十进制数:二进制表示中1的个数)
    int count(int num)
    {
    	int count = 0;
    	while (num)
    	{
    		count += "\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"[num % 16];
    		num >>= 4;
    	}
    	return count;
    }
    每次取num的后四位,判断有多少个1(4位表示的数值:0--15,0到15,二进制中1的个数分别为0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 )‘\’的作用:转移字符,将字符转化为数字




    展开全文
  • 下列代码有什么问题? char* s="AAA"; printf("%s",s); s[0]='B';...s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosntchar* s="AAA"; 然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
  • 文章目录8_字符串常量池 StringTable8.1_String 的基本特性8.2_String 的内存分配8.3_String 的拼接操作拼接操作与 append 的效率对比8.4_intern() 的使用new String("ab")会创建几个对象?new String("a") + new ...
  • 一、字符串问题  字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究。倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题。我在招聘的时候也偶尔...
  • 字符串常量放在只读存储区

    千次阅读 2016-07-15 20:29:39
    给出以下定义,下列哪些操作是合法的? 1 2 const char *p1 = “hello”; char *const p2 = “world”; 正确答案: A 你的答案: C (错误) p1...
  • 目录 一、String的基本特性 为什么jdk9String由char[]改为了byte[]去存? String存储结构发生了变更,StringBuffer和...四、字符串拼接操作 实例1:(常量常量的拼接结果在常量池) 实例2:(拼接其中有一
  • 当定义的变量为单个字符是,必须外面是单引号,字符用双引号引起。 附:转载OGNL表达式相关的知识点: OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你...
  • 字符型数据字符常量:用单引号括起来的一个字符例如:'a' 'A''$''!'注:'a'与'A'是不同的字符常量转义字符:①以一个'\'开头的字符序列例如:'\n'...故要想在字符串中使用它们,须在其前面加上一个反斜线③若反斜线...
  • 常量中下字符...保管资产重要管业金托务的方面是基,中下字符险包的风存在可能括(。列合常量步要下一做的工作是(,在施质量工过程中问题发生,知单工程工程监理监理出“”以后师发师通,项目工程监理的某实施。容包...
  • s就是字符串常量,"abc"也是字符串常量。字符串里面的字符的值不能再改变了 主串和子串 char s[] = "abcdef";其中s全部的字符串"abcdef",就是主串,其中连续的一部分,例如"abc","bcde","ef"等都可...
  • '\084'正确答案:C解析:A 有双引号,是字符串B 单引号里只能一个字符D \0表明是8进制,只能出现0--7的数字知识点(1)char a = 'k';a是字符,占一个字节;char a[] = "k" a是字符串,占两个字节;C语言在定义字符和...
  • 字符串常量适用于那些对它不做修改的字符串函数. 一、求字符串长度 strlen size_t strlen(const char *str) 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数。 注意:这里...
  • 统计字符串中各类字符的个数

    千次阅读 2020-06-08 22:19:54
    统计字符串中各类字符的个数 一、题目描述  从键盘输入一行字符串,统计其中的大写字母、小写字母、空格、数字、和其他字符的个数。(更好的阅读体验,请浏览...要记住一点,不论我们使用的是字符串常量还是字...
  • 状态机编程思想 @Link: http://www.cnblogs.com/zhanghaiba/p/3569928.html ... 以下为转载该题在状态机编程思想下详细解答过程 00)设正常状态为0,并初始为...每遍历一个字符,就依次检查下列条件,若成立
  •  1) SQL中的常量和C语言以及其它语言中的常量定义完全相同,就是一些字面值,比如15、'xyz'就分别是数值型字面值和字符串型字面值,它们都属于常量;  2) 而变量是可以定义在SQL脚本中的,但是我们平时写查询语句...
  • 整理C语言知识点 基类型,指针运算,指针变量,数组指针,字符串指针,函数指针,文字常量
  • C中字符串的几种定义方法及说明

    万次阅读 2016-12-06 22:36:26
    在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 1.字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 一个字符串存储在内存中。如:printf...
  • 字符串字符串结束标志

    千次阅读 2020-02-05 16:20:33
    1、在C语言中,是将字符串作为字符数组来处理的。例1就是用一个一 维的字符数 来存放字符串I am a student. ”的,字符串中的字符是逐个存放到数组元素中的。在该例中,字符串的实际长度与数组长度相等。 2、在实际...
  • 关于c语言的字符常量

    千次阅读 2021-01-04 16:40:57
    2.字符常量只能是单个字符,不能为字符串。 3.字符可以是字符集中的任意一个(ASCII)表中。 4.在运算时‘3’的值就变成了其在ASCII表中对应的数值51(其他数字同理)。 例:下列常量中合法的字符常量是(B) A.A B...
  • 但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。即正确顺序是: 1.分配内存给字符指针; 2.分配内存给字符串; 3.将字符串首地址赋值给字符指针; 这里...
  • 字符常量的输出

    2016-12-28 12:41:00
    #include<stdio.h> int main() { putchar('H'); /*输出字符常量 H*/ putchar('e'); /*输出字符常量 e*/ putchar('l'); /*输出字符常量 ...
  • 字符串库函数

    千次阅读 2014-07-20 17:40:30
    string定义: a) string s; //生成一个空字符串s string a="eholldfs";   a="dfgdfg";   cin>>a; b) string s(str)  //拷贝构造函数生成str的... //将字符串str内"始于位置stridx"的部分当作字符串的初值 d) s
  • 详细如图 ![图片说明](https://img-ask.csdn.net/upload/201503/04/1425458038_620349.png)
  • 在说字符串常量之前,先要区分一下地址常量与地址变量的区别:数据存储的空间中的数据可以被修改,这个空间称为变量,如果空间中的数据不能被修改,这个空间称为...在C中定义字符串有下列几种形式:字符串常量,char数
  • C++基础知识篇:C++ 字符串

    千次阅读 2020-12-17 22:36:24
    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用null字符 '\0' 终止的一维字符数组...
  • 检测字符串是否相等

    2010-01-17 15:16:00
    摘自:java核心技术 检测字符串是否相等 可以使用equals...需要注意,s与t可以是字符串变量,也可以是字符串常量。例如,下列表达式是合法的: "Hello".equals(greeting) 要想检测两个字符串是否相等,而不区分大小写,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,482
精华内容 18,192
关键字:

下列正确的字符串常量