字符串常量

课后实战String的一些细节

妖精的绣舞 提交于 2020-04-08 14:40:28
String类是 字符串常量 ,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。 StringBuffer类的构造函数 public StringBuffer() 创建一个空的StringBuffer类的对象。 public StringBuffer( int length ) 创建一个长度为 参数length 的StringBuffer类的对象。 注意:如果参数length小于0,将触发NegativeArraySizeException异常。 public StringBuffer( String str ) 用一个已存在的 字符串常量 来创建StringBuffer类的对象。 if(sbf.length()==11) { sbf.replace(3, 7, "****"); System.out.println("手机号:"+number+"\n屏蔽后的效果:"+sbf.toString()); } String中的方法replace和toString方法 来源: https://www.cnblogs.com/de-ming/p/12659426.html

Java String 常量池理解

六月ゝ 毕业季﹏ 提交于 2020-04-03 01:51:34
String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字符串常量池的设计意图是什么? 字符串常量池在哪里? 如何操作字符串常量池? 字符串常量池的设计思想 字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能 JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化 为字符串开辟一个字符串常量池,类似于缓存区 创建字符串常量时,首先坚持字符串常量池是否存在该字符串 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中 实现的基础 实现该优化的基础是因为字符串是不可变的,可以不用担心数据冲突进行共享 运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收 代码:从字符串常量池中获取相应的字符串 String str1 = “hello”;String str2 = “hello”;System.out.printl("str1 == str2" : str1 == str2 ) //true 字符串常量池在哪里

Python正则表达式,这一篇就够了!

三世轮回 提交于 2020-04-02 00:12:45
大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。 re模块主要定义了9个常量、12个函数、1个异常,每个常量和函数猪哥 都会通过实际代码案例讲解,让大家能更直观的了解其作用! 注:为避免出现代码格式错乱,猪哥尽量使用代码截图演示哦。 一、re模块简介 聊到Python正则表达式的支持,首先肯定会想到 re 库,这是一个Python处理文本的 标准库 。 标准库 的意思表示这是一个 Python内置模块 ,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:https://docs.python.org/3/py-modindex.html#cap-r 因为re是内置模块,所以不需要再下载,使用时直接引入即可: import re re模块官方文档:https://docs.python.org/zh-cn/3.8/library/re.html re模块库源码:https://github.com/python/cpython/blob/3.8/Lib/re.py 二、re模块常量 常量即表示不可更改的变量,一般用于做标记。 re模块中有9个常量,常量的值都是int类型! 上图我们可以看到,所有的常量都是在

1.Java字符串常量String

六月ゝ 毕业季﹏ 提交于 2020-03-30 12:02:15
1.基本概念 1)创建字符串的方式 1.使用""创建字符串 2.使用new关键字创建字符串 总结: (1)单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中; (2)使用new String("")创建的对象会存储到heap中,是运行期新创建的; new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址; 如果池中没有,则在堆中创建一份,然后返回堆中的地址(注意,此时不需要从堆中复制到池中, 否则,将使得堆中的字符串永远是池中的子集,导致浪费池的空间)! (3)使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中; (4)使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在heap中; 2)在执行到双引号包含字符串的语句时,如String a = "123",JVM会先到常量池里查找, 如果有的话返回常量池里的这个实例的引用,否则的话创建一个新实例并置入常量池里。 所以,当我们在使用诸如String str = "abc";的格式定义对象时,总是想当然地认为, 创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new(

PHP manual notes | PHP手册笔记

你说的曾经没有我的故事 提交于 2020-03-29 02:58:09
PHP http://www.php.net/manual/zh/index.php 基本语法 PHP 标 记 可以在 PHP 中使用四对不同的开始和结束标记。其中两种,<?php ?> 和 <script language="php"> </script> 总是可用的。另两种是短标记和 ASP 风格标记,可以在 php.ini 配置文件中打开或关闭。尽管有些人觉得短标记和 ASP 风格标记很方便,但移植性较差,通常不推荐使用。 此外注意如果将 PHP 嵌入到 XML 或 XHTML 中则需要使用 <?php ?> 标记以保持符合标准。 如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白 从 HTML 中分 离 要输出大段文本时,跳出 PHP 解析模式通常比将文本通过 echo 或 print 输出更有效率。 指令分隔 符 同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令。在一个 PHP 代码段中的最后一行可以不用分号结束。 注 释 PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。 // 或 # /*…*/ 类型 简 介 PHP 支持 8 种原始数据类型。 四种标量类型: boolean (布尔型) integer

字符型常量和字符串常量的区别?

别来无恙 提交于 2020-03-20 11:04:06
1、形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符 2、含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置) 3、占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节) 来源: https://www.cnblogs.com/holdoncomeon/p/12530037.html

Java内存分配原理

。_饼干妹妹 提交于 2020-03-08 12:41:16
本文将详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 Java内存分配中的栈 在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 Java内存分配中的堆 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是 为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。 引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序 运行到使用 new

java内存分配原理

佐手、 提交于 2020-03-08 12:39:03
一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 Java内存分配中的栈 在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 Java内存分配中的堆 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是 为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。 引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序 运行到使用 new 产生数组或者对象的语句所在的代码块之外

关于String StringBuffer StringBuilder

余生长醉 提交于 2020-02-29 11:09:46
0. String对象的创建 1、关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world"); 问题是参数"Hello world"是什么东西,也是字符串对象吗?莫非用字符串对象创建一个字符串对象? 2、当然,String类对象还有一种大家都很喜欢的创建方式:String s="Hello world"; 但是有点怪呀,怎么与基本数据类型的赋值操作(int i=1)很像呀? 在开始解释这些问题之前,我们先引入一些必要的知识: 1. Java class文件结构 和常量池 我们都知道,Java程序要运行,首先需要编译器将源代码文件编译成字节码文件(也就是.class文件)。然后在由JVM解释执行。 class文件是8位字节的二进制流 。这些二进制流的涵义由一些紧凑的有意义的项 组成。比如class字节流中最开始的4个字节组成的项叫做魔数 (magic),其意义在于分辨class文件(值为0xCAFEBABE)与非class文件。class字节流大致结构如下图左侧。 其中,在class文件中有一个非常重要的项—— 常量池 。这个常量池专门放置源代码中的符号信息(并且不同的符号信息放置在不同标志的常量表中)。如上图右侧是HelloWorld代码中的常量表(HelloWorld代码如下)

如何摆脱GCC中从字符串常量到&apos;char *&apos;&apos;警告的弃用转换?

假如想象 提交于 2020-02-28 06:53:03
所以我正在开发一个非常大的代码库,最近升级到gcc 4.3,它现在触发了这个警告: 警告:不推荐将字符串常量转换为'char *' 显然,解决这个问题的正确方法是找到每个声明 char *s = "constant string"; 或函数调用如: void foo(char *s); foo("constant string"); 并使它们成为 const char 指针。 但是,这意味着触及564个文件,最小,这不是我希望在此时执行的任务。 现在的问题是我正在运行 -werror ,所以我需要一些方法来扼杀这些警告。 我怎样才能做到这一点? #1楼 PyTypeObject PyDict_Type= { ... PyTypeObject PyDict_Type= { PyObject_HEAD_INIT(&PyType_Type), "dict", dict_print, 0, 0 }; 观看名称字段,在gcc中编译时没有警告,但在g ++中它会,我不知道为什么。 在 gcc (Compiling C) ,-Wno-write-strings默认是活动的。 in g++ (Compiling C++) Wwrite-strings默认是活动的 这就是为什么会有不同的行为。 对于我们来说,使用 Boost_python 宏 Boost_python 产生这样的警告。