初识Java语言——String类以及字符串与字符和字符数组之间的转换
一、String类
String类是和字符串相关的封装类。
1、什么是字符串?
在C语言中:用“”括起来的由字符构成的字串;末尾‘\0’结尾。
在Java中没有‘\0’结尾这一说。
2、存储位置在哪?
堆当中的字符串常量池,且每个字符串在常量池中都是唯一的。
3、如何声明一个字符串?
String str="hahahaha";
/
String str1=new String("hahahaha");
char[]c={
'a','b','c'};
String str2=new String(c);
(主要用以上三种方式进行声明一个字符串。)
4、字符串可以被改变吗?
不能,如果非要改变,则必须采用反射去解决。
下面引入两个字符串有关的题:
1、指出下列程序运行的结果()
public class Example{
String str = new String("good");
char[ ] ch = {
'a' , 'b' , 'c' };
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[ ]){
str = "test ok";
ch[0] = 'g';
}
}
作业内容
A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc
乍一看选择D,但是正确答案选择B,为什么呢?
因为Change中的str是局部变量,在传参时只是让str的指向变为指向ex的str所指向的对象,而改变时之改变了局部变量str的指向,使其指向“text ok”,而ex的str的指向并没有变。所以答案选B。
2、下面代码将输出什么内容:()
public class SystemUtil{
public static boolean isAdmin(String userId){
return userId.toLowerCase()=="admin";
}
public static void main(String[] args){
System.out.println(isAdmin("Admin"));
}
}
作业内容
A.true
B.false
C.1
D.编译错误
正确答案选B。
String类的toLowerCase方法是将字符串中的大写字母全变为小写字母,并且返回一个new对象,所以new的对象的地址是和“admin”是不同的,后者在字符串常量池,前者不在字符串常量池,“==”是比较值的,明显地址值不相同,所以为false。
二、字符串与字符和字符数组之间的转换
1、字符串变字符:
String str="hahahaha";
char c=str.charAt(0);//即根据下标转换
2、字符串变字符数组:
String str="hahahaha";
char[]c=str.toCharArray();
3、字符数组变字符串:
char[]c={
'a','b','c'};
String str=new String(c);
char[]c={
'a','b','c'};
String str=String.valueOf(c);
String str2=String.copyValueOf(c);
在学Java的路上坚定的走下去,一起加油!