Java第十天
ASCII码表


字符串(String)
在 Java 中字符串属于对象。
在定义String str = "abc;"时,“abc"作为常量存储在数据共享区,定义时首先会到数据共享区中去查找是否存在"abc"这样的字符串,如果存在就将"abc"的内存地址赋给str,若不存在则创建一个"abc”,再将内存地址赋给str。(先在数据共享区查找,若没有则创建,若存在则引用内存地址)
常量字符串是常量,它们的值在创建后不可更改。
注意:下方代码看似改变了str的值实则没有。
1.在数据共享区中首先会创建"abc"并赋予一个内存地址,并将这个内存地址赋给str。
2.其次在运行时发现数据共享区没有"de",所以在数据共享区中创建"de"并赋予一个内存地址。
3.运行后并不是"abc"修改为"abcde",而是在数据共享区中再创建一个"abcde"并赋予一个内存地址,然后将该内存地址赋给str,所以字符串的值在创建后不可更改。
String str = "abc";
str = str + "de";
①String str = "helloworld";
在数据共享区创建的的是一个字符串的常量对象。
②String str1 = new String("helloworld");
先在堆中创建一个字符串的对象,然后再到数据共享区中创建一个字符串的常量的对象,最后再将堆中的对象指向数据共享区的对象。
注意:若已创建①,那么在创建②时会先在堆中创建②的对象,然后将②堆中的对象直接指向数据共享区中已创建的①的对象。
①和②的内存地址不同,但值相同。
③String str = "a";
④String str = "a";
③和④的值与内存地址都相同
1.String str = "a";
2.String str1 = "b";
3.String str2 = "ab";
System.out.print("a"+"b");
1和2拼接后一定会产生新的字符串,并与3的内存地址不相同。因为字符串做拼接时,只要存在一个已存在地址的字符串常量,就会产生新地址。
3和(“a”+“b”)的内存地址相同。因为如果是两个未被引用的常量字符串做拼接,则会去数据共享区中查找,若已存在相等的直接引用,不会重新创建。
字符串常用构造方法
String()
初始化新创建的 String对象,使其表示空字符序列。
例:
String 局部变量名 = new String();
---------------------------------------------------------------------------------
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。
(将字节数组中每一个数值转换成相应的ASCII的字符,然后组成字符串)
例:
String 局部变量名 = new String(byte型的数组名);
byte[] bs ={65,66,67,68,69,70,71};
String str = new String(bs);
System.out.println(str);
输出结果:
ABCDEFG
---------------------------------------------------------------------------------
String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。
(将字节数组作为参数的字符串截取创建一个新的String)
例:
String 局部变量名 = new String(byte型数组名,起始索引,截取长度);
byte[] bs ={65,66,67,68,69,70,71};
String str = new String(bs,0,3);
System.out.println(str);
输出结果:
ABC
---------------------------------------------------------------------------------
String(char[] value)
分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。
(将字符数组作为参数创建字符串)
例:
String 局部变量名 = new String(char型数组名);
char[] cr ={'a','b','c','d','e'};
String str = new String(cr);
System.out.println(str);
输出结果:
abcde
---------------------------------------------------------------------------------
String(char[] value, int offset, int count)
分配一个新的 String ,其中包含字符数组参数的子阵列中的字符。
(将字符数组作为参数的字符串截取创建字符串)
例:
String 局部变量名 = new String(char型数组名,起始索引,截取长度);
char[] cr ={'a','b','c','d','e'};
String str = new String(cr,1,4);
System.out.println(str);
输出结果:
bcde
----------------------------------------------------------------------------------
String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。 (将常理字符串作为参数创建一个新的字符串)
例:
String 局部变量名 = new String("字符串");
String str = new String("ABCDE");
System.out.println(str);
输出结果:
ABCDE
字符串判断
返回值类型 方法名 参数列表
boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结尾。
例:
String str = new String("ABCDE");
System.out.println(str.endsWith("E"));
输出结果:
true
---------------------------------------------------------------------------------
boolean equals(Object anObject)
将此字符串与指定对象进行比较。
例:
String str = new String("ABCDE");
String str1 = "ABCDE";
System.out.println(str1.equals(str));
输出结果:
true
---------------------------------------------------------------------------------
boolean equalsIgnoreCase(String anotherString)
将此 String与其他 String比较,忽略案例注意事项。 (忽略大小写)
例:
String str = new String("ABCDE");
String str1 = "ABcdE";
System.out.println(str1.equalsIgnoreCase(str));
输出结果:
true
---------------------------------------------------------------------------------
boolean contains(CharSequence s)
当且仅当此字符串包含指定的char值序列时才返回true。 (包含连续字符)
例:
String str = new String("ABCDE");
System.out.println(str.contains("CD"));
输出结果:
true
---------------------------------------------------------------------------------
boolean startsWith(String prefix, int toffset)
测试在指定索引处开始的此字符串的子字符串是否以指定的前缀开头。
例:
String str = new String("ABCDE");
System.out.println(str.startsWith("AB"));
输出结果:
true
---------------------------------------------------------------------------------
boolean isEmpty()
返回 true如果,且仅当 length()为 0 。
(当且仅当length()为0时返回true)
例:
String str = new String("ABCDE");
System.out.println(str.isEmpty());
输出结果:
false
字符串获取功能
返回值类型 方法名 参数列表
int length()
返回此字符串的长度。
例:
String str = new String("ABCDE");
System.out.println(str.length());
System.out.println("ABCABCD".length());
输出结果:
5
7
---------------------------------------------------------------------------------
char charAt(int index)
返回 char指定索引处的值。
例:
String str = new String("ABCDE");
System.out.println(str.charAt(3));
输出结果:
D
---------------------------------------------------------------------------------
int indexOf(int ch)
返回指定字符第一次出现的字符串内的索引。 (当返回值为-1时目标字符不存在)
例:
String str = new String("ABCDE");
System.out.println(str.indexOf('B'));
输出结果:
1
---------------------------------------------------------------------------------
int indexOf(String str)
返回指定子字符串第一次出现的字符串内的索引。 (当返回值为-1时目标字符不存在)
例:
String str = new String("ABCDE");
System.out.println(str.indexOf("DE"));
输出结果:
3
---------------------------------------------------------------------------------
int indexOf(String str, int fromIndex)
返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。
例:
String str = new String("ABCDE");
System.out.println(str.indexOf("AB",4));
输出结果:
-1
---------------------------------------------------------------------------------
String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。(包含开始索引本身)
(截取从指定索起始后的字符串,并组成一个新的字符串)
例:
String str = new String("ABCDEFGHI");
System.out.println(str.substring(2));
输出结果:
CDEFGHI
---------------------------------------------------------------------------------
本文探讨了ASCII码表,并详细介绍了Java中的字符串(String)。字符串在定义时,如'abc',会先检查数据共享区是否存在该字符串,若无则创建并赋地址给变量。字符串一旦创建,其值无法改变。同时,文中提到了字符串对象的两种创建方式,虽然内存地址可能不同,但值是相同的。
371

被折叠的 条评论
为什么被折叠?



