对String的初步认识

1、字符串基本性质

String是SUN写好的一个内置类,java.lang.String。

String的底层是用byte[]进行存储数据。

String类是用final修饰的,调用者不能对其中的属性和方法修改。是线程安全的。

凡是直接用双引号创建的都是String对象,这类String对象都在方法区的字符串常量池中创建,一旦创建不可改变,都会占用空间。

字符串对象都有length()方法,可以获取字符串的长度

2、String对象的两种创建方式和区别

//方式1
String str1 = "abc";
//方式1在JVM中,是在栈中创建了变量str1,在方法区的字符串常量池创建了对象"abc"。然后栈中的变量str1直接指向了方法区的对象"abc"。只创建了一个对象。


//方式2
String str2 = new String("abc");
//方式2在JVM中,是在栈中创建了变量str2,在堆中创建new了对象string,在方法区的字符串常量池创建了对象"abc"。然后栈中的变量str2指向的是堆中的对象string,再有对象string指向方法区中的对象"abc"。创建了两个个对象。

3、字符串判断是否内容相等

字符串判断是否内容相等时,用equals方法,不要用==

SUN重写了String 的equals方法,可以直接比较两个字符串的值。

建议:"字符串".equals(字符串变量名)这样使用equals,可以避免空指针异常

4、字符串拼接

进行字符串拼接操作,较少的字符串的连接可以用+,也可以使用StringBuffer/StringBuilder的append方法,后者可以减少内存的损耗。

//变量str1和str2是指向字符串常量池中的同一个字符串对象
String str1 = "a"+"b";
String str2 = "abc";

//用+做字符串拼接,是在堆中创建了新的String对象,再让变量str3指向它
//以下相当于new String("abc"),和上面的在内存创建形式是不同的
String str3 = str1+"c";

5、String对象内存图

6、String类中常用的构造方法

  1. "字符串"  常用

  2. new String("字符串") 常用

  3. new String(byte/char类型的一维数组 ) 传入一个byte/char数组

  4. new String(byte/char类型的一维数组、int截取数组的起始下标、int截取长度)

7、String类中常用的方法

char c = "字符串".charAt(int index)

        通过字符串下标index获取字符

int compareResult = "字符串1".compareTo("字符串2")

        比较两个字符串的大小,从首个字符开始依次比较

compareResult 有三个值:

        0表示两字符串相等,-1表示字符串1小于字符串2,1表示字符串1大于字符串2

boolean result = "字符串1".contains("字符串2")

        判断字符串1中是否包含字符串2,包含返回true,不包含返回false

boolean result = "字符串1".endwith("字符串2")

        判断字符串1中是否以字符串2结尾,是以字符串2结尾返回true,不是返回false

boolean result = "字符串1".equals("字符串2")

        比较字符串1的值是否等于字符串2(不忽略大小写),相等返回true,不相等返回false

boolean result = "字符串1".equalsIgnore("字符串2")

        比较字符串1的值是否等于字符串2(忽略大小写),相等返回true,不相等返回false

byte[] byteArr = "字符串".getBytes()

        将字符串转成byte数组

int index = "字符串1".indexOf("字符串2")

        返回字符串2在字符串1中第一次出现处的下标/索引,没有就返回-1

int index = "字符串1".lastIndexOf("字符串2")

        返回字符串2在字符串1中最后一次出现处的下标/索引,没有就返回-1

boolean result = "字符串".isEmpty()

        判断字符串是否是空字符串,是返回true,不是返回false

int length = "字符串".length()

        返回字符串的长度

String newStr= "字符串".replace("字符串的片段","替换字符串片段")

        返回替换后的新的字符串

String[] strs ="字符串".split ("分隔符")

        返回按指定分隔符拆分后的字符串数组

boolean result = "字符串1".startsWith("字符串2")

        判断字符串1 是否是以字符串2开始,是返回true,不是返回false

String newStr = "字符串".substring(beginIndex)

        将字符串从下标beginIndex(包括该下标的字符)截取到最后,返回截取到的字符串

String newStr = "字符串".substring(beginIndex,endIndex)

        将字符串从下标beginIndex(包括该下标的字符)截取到下标为endIndex前一个字符,返回截取到的字符串

char[] charArr = "字符串".toCharArray()

        将字符串转换为char数组

String newStr = "字符串".toLowerCase()

        将字符串全部转为小写形式,返回一个新的字符串

String newStr = "字符串".toUpperCase()

        将字符串全部转为大写形式,返回一个新的字符串

String newStr = "字符串".trim()

        去掉字符串的前后空格,返回一个新的字符串

String Str = String.valueOf(非字符串)

        将非字符串转为字符串

8、StringBuffer和StringBuider

StringBuffer可以理解为:用来接收数据的缓存。

StringBuffer和StringBuider这两个内置类都可以用作字符串拼接,但主要java还是提供StringBuider用作字符串拼接。

StringBuffer和StringBuider底层都是byte[]数组,往他们中存放数据,其实就是放到byte[]中,这个数组的默认初始化容量是16个字符。

建议:在创建StringBuffer和StringBuider对象时,尽量可能给定一个合适初始化容量,减少底层数组的扩容次数

StringBuffer和StringBuider的区别是:前者是线程安全的,后者是非线程安全

C语言初步学习可从以下方面获取资料: - **基础概念**:需了解编程基本概念,如变量、常量、数据类型、指针、控制结构(顺序语句、分支语句、循环语句)、函数等,这能让初学者对计算机编程有初步认识,具备基本编程思维和解决问题的能力。C语言是中级语言,结合了高级和低级编程语言特点,语法与Java、C++和Python相似,执行速度快、效率高、内存占用小、可移植,且有丰富的库,适合开发高性能和嵌入式应用程序[^1]。 - **程序结构特点**:一个程序由一个或多个源程序文件组成,源程序文件可包含多个函数。源程序文件包含预处理指令、全局声明、函数定义三部分。函数是C程序主要组成部分,方便调试和管理,可将程序分成若干程序模块,实现模块化。一个函数包括函数首部(函数名、函数类型等)和函数体(声明部分和执行部分)。程序从main函数开始执行,计算机操作由函数的C语句完成,每个数据声明和语句最后要有分号,C语言本身不提供输入输出语句,由函数库scanf和printf等函数完成,程序应包含注释[^2]。 - **核心知识点**:基础语法涵盖变量、数据类型(int/float/char)、运算符、表达式;控制结构有if - else、switch、for/while循环;函数方面需掌握定义、调用、参数传递、递归初步;输入输出涉及printf/scanf格式化操作和缓冲区概念[^3]。 - **代码示例**: - **数组操作**:以下代码实现字符串复制 ```c #include <stdio.h> #include <string.h> int main(){ char str1[50] = "学习c不是真正的快乐。"; char str2[50] = "learnning c is not the true happiness."; strcpy(str1, str2); printf("%s\n", str1); return 0; } ``` - **比较两个整数大小**:以下代码实现输入两个整数并输出较大值 ```c int main() { int a=0; int b=0; int m=0; scanf("%d%d", &a,&b); m = MAX( a, b); printf("%d\n", m); return 0; } ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿一直学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值