首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

金九银十,收下这份 Java String 面试题

请点赞关注,你支持对意义重大。 Hi,是小彭。本文已收录到 GitHub · Android-NoteBook[1] 。 前言 大家好,是小彭。...在这篇文章里,将总结 Java 字符串重要知识点 & 面试题 ,如果能帮上忙,请务必点赞加关注,这真的对非常重要。 ---- 学习路线图: ---- 1....字符串本质上是以 \0 为结束符字符数组字符数组,因此字符串和字符数组在本质上相同,都是一块连续内存空间,以需要转义 \0 为结束符。...在 C 语言中,char 类型占 1 字节,分为有符号与无符号两种; 在 Java ,char 类型占 2 字节,只有无符号类型。...6.2 String#intern() 实现原理 如果字符串常量池中已经包含一个等于此 String 对象字符串,则返回常量池中这个字符串;否则,先将此 String 对象包含字符串拷贝到常量池中

87210

C语言基础知识入门(大全)「建议收藏」

十、常量 在程序执行过程,值不发生改变量称为常量。 mtianyan: C语言常量可以分为直接常量符号常量。...直接常量也称为字面量,是可以直接拿来使用,无需说明量,比如: 整型常量:13、0、-13; 实型常量:13.33、-24.4; 字符常量:‘a’、‘M’ 字符串常量:”I love imooc!”...一般有以下两种格式: char 字符串名称[长度] = “字符串值”; char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’}; 注意: []长度是可以省略不写;...采用第2种方式时候最后一个元素必须是’\0’,’\0’表示字符串结束标志; 采用第2种方式时候在数组不能写中文。...对,就是指针,你可以这样 int *pa = &a; pa 存储就是变量 a 地址,也叫做指向 a 指针。 在这里想谈几个看起来有点无聊的话题: 为什么我们需要指针?

1.7K41
您找到你想要的搜索结果了吗?
是的
没有找到

String 详解以及内存分析

; 符号 “+” 把两个字符串按给定顺序连接在一起,并且是完全按照给定形式。...字符串相等判断 equals 方法用来检测两个字符串内容是否相等。...循环 i = 0; gh = "a0"; 先去 "字符串池" 找 "a0", 没有找到,在 "字符串池" 创建 "a0" 这个String 对象 i = 1; gh = "a01";...实际上这个过程只是 gh 这个引用指向在改变,"a"、"a0"、"a01" 并没有被改变。 注:这是几个草图为了帮助大家理解,实际上字符串内存分析要比这个复杂点。 ? ? ?...早期版本字符串拼接是会在常量池创建对象,所以不少编程规范都会说不要直接用加号去拼接字符串,因为老是去常量池创建对象的话,开销也不小。

75720

为什么要将永久代替换为元空间?

为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 什么是运行时常量池? 字符串常量池有什么作用? JDK 1.7 为什么要将字符串常量池移动到堆? 下面是正文。...字面量包括整数、浮点数和字符串字面量,符号引用包括类符号引用、字段符号引用、方法符号引用和接口方法符号引用。 运行时常量功能类似于传统编程语言符号表,尽管它包含了比典型符号表更广泛数据。...JDK1.7 字符串常量池和静态变量被从方法区拿到了堆, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下东西还在方法区, 也就是 HotSpot 永久代 。...如果找不到的话,则在常量池中创建该字符串字面量对象并返回其引用。 相关问题:JVM 常量池中存储是对象还是引用呢?...- RednaxelaFX - 知乎 JDK 1.7 为什么要将字符串常量池移动到堆

75020

萌新学习C++容易漏掉知识点,看看你中招了没有(一)

,这就是为什么书读百遍,其义自见,可能夸张了,不知道你们是怎样,一本书多读,确实能带给我不同知识,这也是为什么想起来写总结,加了一个群,看到萌新们问问题大多是他们看书漏掉知识,这些人一定是只看了一遍或者没看...为什么会漏掉知识,个人认为是这样,最起码是,比如这一章讲for,一看语法,去,就怎么简单?...上机一敲,啪啦啪啦啪啦,循环正确,嗯,for循环学会了,然后沉浸在自我喜悦顺利进入了下一章,应该就是这样吧? 哈哈,然后后期写复杂程序时候就出了问题,于是再次翻开了那久违for循环。...; //数组c10个元素将被初始化为0,但是数组d,只有d[0]被初始化为1,其他元素还是初始化为0,你说气不气人 5....整形提升: 如果bool,char、short,包括它们有符号或无符号变型,以及枚举类型,可以使用在需要int或者unsigned int表达式

50410

探秘JavaString、StringBuilder以及StringBuffer

大家好,又见面了,是你们朋友全栈君。...下面解释一下原因:   在前面一篇讲解关于JVM内存机制一篇博文中提到 ,在class文件中有一部分 来存储编译期间生成 字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区运行时常量池...因此在上述代码,String str1 = “hello world”;和String str3 = “hello world”; 都在编译期间生成了 字面常量符号引用,运行期间字面常量”hello...总所周知,通过new关键字来生成对象是在堆区进行,而在堆区进行对象生成过程是不会去检测该对象是否已经存在。因此通过new来创建对象,创建出一定是不同对象,即使字符串内容是相同。...在String类,intern方法是一个本地方法,在JAVA SE6之前,intern方法会在运行时常量池中查找是否存在内容相同字符串,如果存在则返回指向该字符串引用,如果不存在,则会将该字符串入池

21320

C语言:预处理详解

如果在我们书写程序时想写一个无限循环,我们可以这样写 int main() { for ( ; ; ) //for循环什么判断都不写时候表示恒成立 ; return 0; } 而我们可以#define...当预处理器搜索#define定义符号时候,字符串常量内容并不被搜索。...#define M 10 printf("M");//M在字符串内部,不会被搜索 六、宏和函数区别 宏通常被应⽤于执⾏简单运算。 ⽐如在两个数找出较⼤⼀个时,写成下⾯宏,更有优势⼀些。...INTPTR2 const p3是一个指针常量 八、#和## 8.1 # #运算符将宏⼀个参数转换为字符串字⾯量。它仅允许出现在带参数替换列表。...#endif //__DEBUG__ } return 0; } 易错点: a==10,明明是真的,为什么还是不编译?? 因为条件编译语句在预处理时候就已经做出判断了!

22610

python3--变量,布尔值,用户交互 input,if语句,while循环

2个字节,可能更多 UTF-8,是对Unicode编码压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类: ascii码内容用1个字节保存,欧洲字符用2个字节保存,东亚字符用...定义变量不好方式举例 变量名为中文,拼音 变量名过长 变量名词不达意 常量 常量即指不变量,或在程序运行过程不会改变量 举例,年龄会变,那这就是变量,但在一些情况下,他年龄不会变了,那就是常量...在python没有一个专门语法代表常量,程序员约定俗用变量名全部大写代表常量 USERNAME = 'sam' 程序交互 #将用户输入内容赋值给name变量 name = input("输入用户名...(str) 在python,加了引号字符都被认为是字符串!...print("你还有{}次机会".format(3-int(number))) 7、等待用户输入内容,检测用户输入内容是否包含敏感字符?

1.6K20

PHP全栈学习笔记2

转义字符 \n 换行 \r 回车 \t 水平制表符 \\ 反斜杠 \$ 美元符号 \' 单引号 \'' 双引号 界定符格式: $string = <<< str 输出字符串 str; <?...检测数据类型 is_bool检测变量是否是布尔类型 is_string检测变量是否是字符串类型 is_float/is_double 检测变量是否为浮点类型 is_null 检测变量是否为整数 is_array...检测变量是否为数组 is_object 检测变量是对象类型 is_numeric 检测变量是否为数字 is_integer/is_int 检测变量是否为整数 php常量,声明和使用常量,预定义常量...$va.' " '; } echo ''; } 字符串,单引号,双引号,字符串连接符,字符串操作 字符串是由零个或多个字符组成一个集合 单引号和双引号区别,单引号内容是只能被作为普通字符串处理...您真诚赞赏是前进最大动力!

71830

慕课网三小时入门php笔记

学习内容指标 1、通过教程学习可以了解PHP变量、变量类型、常量等概念 2、认识PHP运算符,掌握PHP顺序结构、条件结构、循环结构语句。...浮点型 为我们常说小数,如$num_float = 1.234; //小数点 php两种特殊类型 第一种资源 ? ? 常量理解;PHP常量 常量是单个值得标识符(名称)。...在脚本无法改变该值,有效常量名以字符和下划线开头 ,常量名称没有$开头 , 与变量不同 常量贯穿整篇代码 ,为全局性质。 ?...其中对break理解为结束循环 有了for循环,就会有他伙伴while循环其中语法是 ? ? do while 语句理解 ?...当条件为FALSE时,while任务会一次也不执行,do...while任务会执行1次。 for循环语句 语法 ? ? 对于foreach循环语句理解 ? 用例子理解 ?

1.1K30

通过示例学 Golang 2020 中文版【翻译完成】

变量 变量 理解var关键字 变量作用域 变量和常量命名约定 理解:=符号或短变量声明 你好世界 常量 常量 常量在声明后可以重新赋值吗 内/外作用域中常量 全局和局部常量 类型化和非类型化常量...声明常量 字符串常量 数字/整数/浮点常量 布尔常量 字符常量 多个常量声明 常量映射 常量结构 常量数组或切片 条件和循环 理解if-else语句 for循环 switch语句 Switch语句...404(找不到资源)状态代码 在 HTTP 响应返回 401(未授权)状态代码 在 HTTP 响应返回 403(禁止)状态代码 在 HTTP 响应返回 200(OK)状态代码 返回 201(已创建...排序 0、1 和 2 数组 跳跃游戏 删除排序数组重复项 矩阵 螺旋矩阵问题 顺时针旋转对称矩阵或图像 算法 LRU 高速缓存实现 链表 将单链表转换为数组 将单链表转换为循环链表 检查链表是否是循环...正则表达式连接 正则表达式交替 匹配全字符串 理解插入符号和美元字符 匹配字符串前缀或后缀 不区分大小写正则表达式匹配 匹配原始或字面值字符串 理解点.字符 替换所有匹配正则表达式字符串 向后引用

6.2K50

【C语言】预处理&&编译链接&&调试技巧详解

但是对于宏,不能出现递归 当预处理器搜索#define定义符号时候,字符串常量内容并不被搜索 1.2.4 #和## 1.2.4.1 # 作用 如何把参数插入到字符串?...、 我们发现字符串是有自动连接特点 假设有这样代码: 我们如何用宏来实现printf功能呢,这里我们使用# 他替换是周怎么完成呢 这里只有当字符串作为宏参数时候才可以把字符串放在字符串...使用#,把一个宏参数变成对应字符串 比如:代码#N会被预处理器处理为:“N” 所以“#N”即被处理为““N”” 1.2.4.2 ## 作用 ##可以把位于他两边符号合成一个符号 他允许宏定义从分离文本片段创建标识符...(a):(b)) 那为什么不用函数来完成这个任务?...) { arr[i] = 0; printf("hehe\n"); } return 0; } 如果是 debug 模式去编译,程序结果是死循环

13910

常量字符串(C语言初阶细致)

字符类型 字符与字符串比较 代码检测证明是否有\0作为结束标志: 结论(超级重要):字符没有’\0’作为结束标记 分别打印字符 和字符串: 解释: 0.字符数组定义时可以省略数组元素个数...%s是专门来打印字符串,当遇到’\0’时结束打印操作; 2.字符’\0’需要手动添加,不加就无法停止打印;而字符串’\0’在末尾自动添加, 3.但由上面的结论(字符没有’\0’作为结束标记)得知在打印字符时候一直没有遇到结束标志...但是如果就想打印出char ch1[] = {‘a’,‘b’,‘c’}; 下面提供两种方法: 方法一: (1)借用循环+%c打印 方法二: (2)在char ch1[] = {‘a...’,‘b’,‘c’};手动添加一个’\0’,变成: char ch1[] = {‘a’,‘b’,‘c’,‘\0’’}; 借用strlen来求字符串长度: Q:什么是strlen?...\n换行符(反斜杠不要写反) \t制表符 \0字符串结束标志符号 如果你还有更多关于ASCII表方面的疑惑,速戳: ASCII百科全书 答案14 易错点解释:源自\ddd,

64870

探秘JavaString、StringBuilder以及StringBuffer

下面解释一下原因:   在前面一篇讲解关于JVM内存机制一篇博文中提到 ,在class文件中有一部分 来存储编译期间生成 字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区运行时常量池...因此在上述代码,String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了 字面常量符号引用,运行期间字面常量"hello...总所周知,通过new关键字来生成对象是在堆区进行,而在堆区进行对象生成过程是不会去检测该对象是否已经存在。因此通过new来创建对象,创建出一定是不同对象,即使字符串内容是相同。...因此在循环了10000次之后,这段代码所占资源要比上面小得多。   那么有人会问既然有了StringBuilder类,为什么还需要StringBuffer类?...在String类,intern方法是一个本地方法,在JAVA SE6之前,intern方法会在运行时常量池中查找是否存在内容相同字符串,如果存在则返回指向该字符串引用,如果不存在,则会将该字符串入池

33420

你真的懂JavaString、StringBuilder和StringBuffer吗?

为什么会出现这样结果?下面解释一下原因:   在class文件中有一部分用来存储编译期间生成字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区运行时常量池。   ...因此在上述代码,String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了字面常量符号引用,运行期间字面常量"hello...总所周知,通过new关键字来生成对象是在堆区进行,而在堆区进行对象生成过程是不会去检测该对象是否已经存在。因此通过new来创建对象,创建出一定是不同对象,即使字符串内容是相同。...因此在循环了10000次之后,这段代码所占资源要比上面小得多。   那么有人会问既然有了StringBuilder类,为什么还需要StringBuffer类?...在String类,intern方法是一个本地方法,在JAVA SE6之前,intern方法会在运行时常量池中查找是否存在内容相同字符串,如果存在则返回指向该字符串引用,如果不存在,则会将该字符串入池

69740

你真的懂JavaString、StringBuilder和StringBuffer吗?

为什么会出现这样结果?下面解释一下原因:   在class文件中有一部分用来存储编译期间生成字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区运行时常量池。   ...因此在上述代码,String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了字面常量符号引用,运行期间字面常量"hello...总所周知,通过new关键字来生成对象是在堆区进行,而在堆区进行对象生成过程是不会去检测该对象是否已经存在。因此通过new来创建对象,创建出一定是不同对象,即使字符串内容是相同。...因此在循环了10000次之后,这段代码所占资源要比上面小得多。   那么有人会问既然有了StringBuilder类,为什么还需要StringBuffer类?...在String类,intern方法是一个本地方法,在JAVA SE6之前,intern方法会在运行时常量池中查找是否存在内容相同字符串,如果存在则返回指向该字符串引用,如果不存在,则会将该字符串入池

52220

C语言中宏定义

简单宏定义 简单宏定义有如下格式: [#define指令(简单宏)]  #define 标识符替换列表 替换列表是一系列C语言记号,包括标识符、关键字、数、字符常量字符串字面量、运算符和标点符号...在一个宏定义,编译器可以检测到绝大多数由多余符号所导致错误。但不幸是,编译器会将每一处使用这个宏地方标为错误,而不会直接找到错误根源——宏定义本身,因为宏定义已经被预处理器删除了。...“硬编码常量会更难于修改,特别是有时候当他们以稍微不同形式出现时。(例如,如果一个程序包含一个长度为100数组,它可能会包含一个从0到99循环。...当使用do{ }while(0)时由于条件肯定为false,代码也肯定只 执行一次, 肯定只执行一次代码为什么要放在do-while语句里呢? 这种方式适用于宏定义存在多语句情况。...所以一般多表达式宏定义中都采用do-while(0)方式。 3. "空操作"定义 了解了do-while循环在宏作用,再来看"空操作"定义。

6.2K10

对less理解

编译成css文件和平时自己写css没什么区别,浏览器自动可读 好处 使用less而不是直接写css有几个好处: less使用常量形式保存一个值,哪里用到这个常量都行,这个常量作用域应该是这个less...display:block a{color:#fff} input{border:0} } 还有其它,不自己写了,看这里http://www.cnblogs.com/hooray/...一些ide支持自动检测less文件改动并自动编译功能,webstorm和phpstorm就有。 服务端编译。就是请求less时候再编译。 浏览器端编译。...这种方法据说官方最不推荐, 在编译完成之前,body宽度会被设为0也不知道为什么,但实际就是这样。 可以使用外部设置变量。...,如果你变量是个字符串,而且第一个是/符号,必须像上面var1那样用单引号+双引号来包围字符串,否则less编译时会报错。

1K20

Win32汇编:汇编基本知识总结

; 定义未初始化变量 var3 BYTE 0 ; 最小符号字节常量 var4 BYTE 255 ; 最大符号字节常量 var5 SBYTE -128 ; 最小符号字节常量....最常见字符串是以空格结尾0h,在C/C++,JAVA定义字符串无需添加结尾0h,这是因为编译器会在编译时候自动字符串后面填充了0h,在汇编语言中我们需要手动添加字符串结尾标志: .data...var2 mov eax,SIZEOF var3 mov eax,SIZEOF var4 main ENDP END main LOOP循环(普通循环): 该指令检测ECX寄存器变化,每次循环寄存器自动减...ExitProcess main ENDP END main LOOP循环(嵌套循环): 在循环内部创建另一个循环时候,必须考虑外层ECX外层循环计数该如何处理,把外层循环计数保存在内存,是非常理想...(针对无符号数)操作,其左移后最低位以0填充,而移动出去最高位则会送入CF(进位标志),原来进位标志位值将被覆盖.

87110

Go语言初体验

封面图片 分享最近学习 Go 语言心得和体会。 Go 概览 Go 特征 经常说要学一样东西,首先要搞清楚它为什么会出现?解决了什么问题 ?...,因为在 Java 想要交换变量必须要声明一个很别扭 tmp 临时变量才能实现变量交换 Go 只支持 for 一种循环语句(减少心智负担) // for 格式 for init; condition...; post{ // 循环逻辑 } for i := range ary { // for range 用于遍历 slice 快捷方法 } 初体验 Go 命名规范 不同于其他语言,Go 函数...不过个人感受 String 本就应该是基本数据类型。用类组合 byte[] 来实现字符串似乎还是有些别扭。 整数 这里主要区分有符号整数、无符号整数。...只有 for 一种循环,简单用法如下: sum := 0 for i := 0; i < 10; i++ { sum += i } Go语言循环和 Java、Javascript 区别主要在于没有小括号

33510
领券