一、关于String类
String实际上与System类和Scanner类一样,都是Java库中一个预定义的类,String类是final的,不可被继承的。String类不是基本数据类型,而是引用类型。
其实,String类其实是通过char数组来保存字符串的,所以String一旦创建也是不可改变的。char类型只能表示一个字符。当我们需要表示一串字符的时候,就会使用字符串的数据类型。例如:
public class Test_String {
public static void main(String[] args) {
char[] a = {'Q','u','a','n','t','a'};
System.out.println(a);
String b = "Quanta";
System.out.println(b);
}
}
运行结果:Quanta
Quanta
注意:char用的是单引号,String是双引号。
1、String的定义。
//第一种方式:创建对象的形式
//因为String是个类,当然能使用new一个对象的方法
String string = new String("I am a student.");
//第二种方式:类似于基本数据类型的定义(特殊的方式),其中引号里的是对象,而s2是对象的地址。
String s2 = "I am a student,too.";
//第三种方式:用+号进行连接
String s3 = "I " + "am " + "a " + "student";
在使用第二种或者第三种创建方式的时候,JVM会先在String池中寻找是否存在相同的内容,如果有,那么就不会创建新的,会直接指向这个已存在的内容,如果没有,才会在String池中创建。
但是使用第一种方法的时候,JVM也会去检查String池,但是不同的时,不论有没有相同的内容,还是会在堆栈区重新创建。
堆内存用于存放由new创建的对象和数组。
2、String的比较
String a = "123";
String b = "123";
String c = new String("123");
String d = new String("123");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a == d);
System.out.println(c == d);
System.out.println(c.equals(d));
运行结果:
true
false
false
false
true
“==”如果是作用在基本数据类型的变量时,就是直接比较变量的值是否相同,但如果是作用String类这样的引用变量中,则是比较所指向的对象地址是否一样(即是否指向同一个对象)。
equals方法是Object基类的方法,而我们所写的类都是继承Object这个类的,所以都存在equals这个方法,而在基类中这个方法比较的是两个对象的引用是否相等(即是否指向同一个对象),所以在基本类型变量中不能使用。而String类对该方法进行了重写,用来比较两个对象所储存的内容是否相等。
3、String类中的方法
小练习:
写一个登录信息,用户名和密码,当用户名为:admin,密码为:123456时,打印出“登录成功” ,否则,打印“登录失败”,并能重新输入,直至成功。