IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> String常见知识点 -> 正文阅读

[PHP知识库]String常见知识点

一 String的内存
在这里插入图片描述
1)String 声明为final 不可继承;
2)String实现了Serializable接口,表示String可以比较大小
实现了Compareble接口,表示String可以比较大小
3)String内部定义了final char[] value用于存储字符串数据,具有不可变性
总结:一个值,一个内存区域地址,且不存相同值,是一 一映射
体现:1当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
2 当对现有的字符串进行连接操作时候,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
3.当调用String的replace修改指定的字符或字符串时,也需要重新指定内存区域进行赋值***
在这里插入图片描述

public class JavaTest {
    public static void main(String[] args) {
        String s1="abc";
        String s2="abc";
        System.out.println(s1==s2);//true
    }
}

4)通过字面量的方式给一个字符串赋值,此时字符串声明在字符串常量池中
5)字符串常量池是不会存储相同内容的字符串的(所有上面二者在同一个地址,因为只存一次)
详情见https://editor.csdn.net/md/?articleId=120342865
例题
String test=“javaandpython”;
String str1=“java”;
String str2=“and”;
String str3=“python”;
System. out. println(test==“java”+“and”+“python”):
System. out. println(test ==str1 + str2 + str3);
对于上面这段代码,结果是true false
这是因为字符串字面量拼接操作是在Java编译器编译期间就执行了,也就是说编译器编译时,直接把"java"、“and"和"python"这三个字面量进行”+“操作得到一个"javaandpython” 常量,并且直接将这个常量放入字符串池中,这样做实际上是一种优化,将3个字面量合成一个,避免了创建多余的字符串对象(只有一个对象"javaandpython",在字符串常量池中)。而字符串引用的"+“运算是在Java运行期间执行的,即str1 + str2 + str3在程序执行期间才会进行计算,它会在堆内存中重新创建一个拼接后的字符串对象。且在字符串常量池中也会有str1,str2与str3,这里创建多少个新的对象与原来字符串常量池中有没有str1\str2\str3有关,如果之前存在就不会创建新的对象。
总结来说就是:字面量”+“拼接是在编译期间进行的,拼接后的字符串存放在字符串池中;而字符串引用的”+"拼接运算实在运行时进行的,新创建的字符串存放在堆中。
那么再来看这题,很明显只在编译期间在字符串常量池中创建了"welcometo360"一个字符串
6)基本数据类型传递数据 引用数据类型传递地址值

在这里插入图片描述
此图中
str引用了ex.str ,但是由于String的不可变性,str="test ok"则新指向一个地址,原来的ex.str不变
而char[]则是更改第一位
二 String的方法
chatAt (int index):返回某索引处的字符
trim()返回字符串的副本,忽略前导空白和尾部空白
equal(Object obj)比较字符串的内容是否相同
equalIsignoreCase(String anotherString)与euals类似忽略大小写
concat(String str)将指定字符串连接到此字符串的结尾
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三 String-----与char的转换
String转换为char
char[] charArray=str1.tocharArray
char转换为String
String str2=new String(arr)
四 String与byte[]之间的转换
String---->byte
str.getBytes()
在这里插入图片描述
byte---->String
new String(bytes)
在这里插入图片描述
五 String StringBuffer StringBuilder
String 不可变的字符序列
StringBuffer 可变的字符序列 线程安全 效率低 底层用char[](没有加final)
在这里插入图片描述
StringBuffer sb2=new StringBuffer(“abc”);//char[] value=new char[“abc”.length()+16];
底层是一个初始创造并多出了16个字节
//问题1:sb2.length()==3
//问题2:扩容问题:如果要添加的数据底层数据盛不下,那就需要扩容底层的数组
默认情况下,扩容为原来容量的2倍+2,同时将原有数组的元素复制到新的数组中
指导意义:建议使用StringBuffer(int capacity)
StringBuilder 可变的字符序列 线程不安全 效率高 底层用char[] (没有加final)
六 StringBuffer的方法
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:45:54  更:2021-09-19 07:46:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:48:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码