精华内容
下载资源
问答
  • java string什么是字符串常量,什么是字符串数组,什么是字符串常量池?
  • 什么是字符串切片 格式: name="xxxxxxx"; name[起始:结束:步长] 起始包含, 结束不包含 半开半闭状态 默认值(重要) 起始值默认是0 结束值默认字符串长度len(此处注意字符串长度比最大下标大1...

    什么是字符串切片

              格式:
              name="xxxxxxx";
              name[起始:结束:步长]
                    起始包含,
                    结束不包含
                    半开半闭状态
    

    默认值(重要)
    起始值默认是0
    结束值默认字符串长度len(此处注意字符串长度比最大下标大1,因为下标是0开始)
    步长默认值1

    所以当步长省略时,代表步长是1

    特殊案例:
    字符串反转
    字符串[::-1]
    步长小于0:从右往左
    步长大于0:从左往右
    起始默认值是0
    结束值默认值是字符串长度
    故反转字符串

    展开全文
  • 什么是字符串,以及字符串与数组的比较: 字符串是由多个字符组成的只读字符数组。 相同点: 1.都能用[i]访问每个元素/字符 2.都有length属性记录元素/字符个数 3.都能用for循环遍历每个元素/字符 4.都支持slice选取...

    什么是字符串,以及字符串与数组的比较:
    字符串是由多个字符组成的只读字符数组。
    相同点:
    1.都能用[i]访问每个元素/字符
    2.都有length属性记录元素/字符个数
    3.都能用for循环遍历每个元素/字符
    4.都支持slice选取子数组/子字符串
    不同:数组可随意改变原数组,但字符串是只读字符数组,一旦创建内容不可改变。

    展开全文
  • 什么是字符串常量池?

    千次阅读 2019-03-09 16:49:49
    文章目录什么是字符串常量池?字符串常量池Java语言规范第三版中的字符串常量 什么是字符串常量池? 在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象: 使用new...

    什么是字符串常量池?

    在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象:

    • 使用new运算符。例如:
    String str = new String("Hello");
    
    • 使用字符串常量或者常量表达式。例如:
    String str="Hello"; //(字符串常量) 或者
    String str="Hel" + "lo"; //(字符串常量表达式).
    

    这些字符串的创建方式之间有什么区别呢?在Java中,equals方法被认为是对象的值进行深层次的比较,而操作符==是进行的浅层次的比较。 equals方法比较两个对象的内容而不是引用。==两侧是引用类型(例如对象)时,如果引用是相同的-即指向同一个对象-则执行结果为真。如果是值类型 (例如原生类型),如果值相同,则执行结果为真。equals方法在两个对象具有相同内容时返回真-但是,java.lang.Object类中的 equals方法返回真-如果类没有覆盖默认的equals方法,如果两个引用指向同一个对象。

    让我们通过下面的例子来看看这两种字符串的创建方式之间有什么区别吧。

    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");
    

    一个字符串对象在字符串常量池外创建,即使池里存在相同的字符串。考虑到这些,要避免new一个字符串除非你明确的知道需要这么做!例如:

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

    结果是:

    false true
    

    JVM中有一个常量池,任何字符串至多维护一个对象。字符串常量总是指向字符串池中的一个对象。通过new操作符创建的字符串对象不指向字符串池中 的任何对象,但是可以通过使用字符串的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
    

    intern() 返回字符串对象的规范化表示形式。也就是把对象转化成字符串常量

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

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

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

    package testPackage;
    class Test {
            public static void main(String[] args) {
                    String hello = "Hello", lo = "lo";
                    System.out.print((hello == "Hello") + " ");
                    System.out.print((Other.hello == hello) + " ");
                    System.out.print((other.Other.hello == hello) + " ");
                    System.out.print((hello == ("Hel"+"lo")) + " ");
                    System.out.print((hello == ("Hel"+lo)) + " ");
                    System.out.println(hello == ("Hel"+lo).intern());
            }
    }
    class Other { static String hello = "Hello"; }
    
    //另一个包下
    package other;
    public class Other { static String hello = "Hello"; }
    

    产生输出:

    true true true true false true
    

    这个例子说明了六点:

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

    原文链接: xyzws翻译:ImportNew.com - lumeng689
    译文链接: http://www.importnew.com/10756.html
    [ 转载请保留原文出处、译者和译文链接。]

    展开全文
  • 1、在非注释语句中,凡是用引号括起来的部分都是字符串(str:英文全写为string) 2、字符串的作用是用来记录文本(文字)信息,与人沟通交流。 二:字符串的表现形式 1、空字符串字面值的表示方法:括号里面除了有...

    一:字符串的定义与作用:

    1、在非注释语句中,凡是用引号括起来的部分都是字符串(str:英文全写为string)

    2、字符串的作用是用来记录文本(文字)信息,与人沟通交流。

    二:字符串的表现形式

    1、空字符串字面值的表示方法:括号里面除了有引号以外什么内容也没有),而字面值的意思是人能看到的,计算机也能把它读出来的值:如以下内容就是空字符串:

    ‘ ‘

    “”

    ‘’’

    “””

    2、非空字符串的字面值表示方法:在引号内放入的一些文本信息(如:欢迎你加入python讨论组),人可以看到这个字符串的文本并且计算机会打印出引号内的信息。例:

    3、 单引号和双引号的区别:单引号内的双引号不算结束符,双引号内的单引号不算结束符,如print(“I’m python program”), 程序会略过单引号,打印出双引号里面的内容,代码如下:

    4、三单引号字符串的作用:三引号字符串的换行会自动转换为换行符’\n’。例:‘Welcome to python group\n good good study!\n day day up!’。如果我们把单引号换成三单引号,把回车符直接换成回车,分别打印出两者的信息,有什么不同?代码如下:

    5、 三单引号里面可以包含单引号和双引号:例:


    正在学习的小伙伴,推荐我们的Python学习扣qun:784758214 ,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF,实战源码】,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每天都有大牛定时讲解Python技术,分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

    尾声:这就是几种字符串的用法,也可以称之为字符串的拼接,大家下去以后,要多多地熟悉

    展开全文
  • 漫画:什么是字符串匹配算法?

    千次阅读 多人点赞 2020-01-13 08:48:00
    ————— 第二天 —————什么意思呢?让我们来举一个例子:在上图中,字符串BA的子串,B第一次在A中出现的位置下标2(字符串的首位下标0),所以返回 2。我们再看另一个例子...
  • C语言12之什么是字符串类型?

    万次阅读 多人点赞 2018-03-04 15:55:08
    1.C语言的字符串类型1.1 C语言没有原生字符串类型1)很多高级语言像java、C#等就有字符串类型,有个String来表示字符串,用法和int这些很像,可以String s1 = "linux";来定义字符串类型的变量。2)C语言没有...
  • dom模板就是原先就写在页面上的,能被浏览器识别的 ...字符串模板可能原先放在服务器上啊,script标签里,js 的字符串里,原先不参与页面渲染的一串字符,所以呢 它可以不在乎 html 结构和标签命名,只要你最后根据...
  • 云漫圈 | 什么是字符串匹配算法?

    千次阅读 2020-02-06 11:50:52
    作者 | 程序员小灰来源 | 程序员小灰(ID:chengxuyuanxiaohui)————— 第二天 —————什么意思呢?让我们来举一个例子:在上图中,字符串BA的子串,B...
  • 什么是字符串(String)的不变性?

    千次阅读 2016-03-07 14:39:12
    Strnig的不变性什么
  • 例:定义一个变量a,并给变量a赋一个字符中,打印输出变量a的内容,并输出变量a的长度,然后用raw字符串再从定义一遍字符串,同样的打印输出变量a及其长度,看看有什么不同之处?代码如下图: 二:字符串的算术运算 1...
  • link中为什么字符串是只读的,但是我可以改变字符串,这怎么回事?
  • 什么是字符串?若干个字符的集合就是一个字符串(String)。Python中的字符串必须由双引号" "或者单引号' '包围,具体格式为:"字符串内容"'字符串内容'字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界...
  • 将一组字符串数组的长度赋值到新的数组,用循环把新的数组输出最长的长度,凭此长度值能否定位到该长度的字符串呢?
  • 什么是 Java 中的字符串

    千次阅读 2019-01-31 10:53:47
    什么是 Java 中的字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名、密码等使用的就是字符串。其实,在前面的章节中我们就已经使用了字符串,例如我们在控制台中输出的 "Hello World" 、 &...
  • c语言中合法标识符有哪些_后端开发C语言标识符指用来标识某个实体的一个...在C语言中字符串以“\0”标志字符串的结束。在C语言中有两种办法去输出结束标志,第一种直接使用字符“\0”来输出结束标志;第二种...
  • 知道Python中的字符串是什么吗?

    千次阅读 多人点赞 2021-03-12 13:59:37
    什么是Python中的字符串? 我们许多熟悉C,C ++等编程语言的人都会得到诸如“字符串是字符的集合或字符数组”的答案。 在Python中也是如此,我们说的是String数据类型的相同定义。字符串是序列字符的数组,并写在...
  • vb的字符串分为定长不定长是什么意思?怎么判断一个vb的字符串是定长的,定长的字符串和字符数组的关系是什么
  • C#中字符串常量池是什么意思,谁能给详细说说?字符串常量池的意义是什么

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,183
精华内容 25,273
关键字:

什么是字符串