目录
1. String
1.1 String概述
String类在java.lang包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象
字符串的特点
字符串不可变,它们的值在创建后不能被更改
虽然String的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
1.2 String 构造方法
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s =“abc” ; | 直接赋值的方式创建字符串对象,内容就是abc |
示范:
package Java.test; public class test { public static void main(String[] args) { //public String()创建一个空白字符串对象,不含有任何内容 String s1=new String(); System.out.println("s1:"+s1); //public String(char[] chs)根据字符数组的内容,来创建字符串对象 char[] ch={'a','b','c'}; String s2=new String(ch); System.out.println("s2:"+s2); //public String(byte[] bys)根据字节数组的内容,来创建字符串对象 byte[] by={97,98,99}; String s3=new String(by); System.out.println("s3:"+s3); //String s =“abc” ;直接赋值的方式创建字符串对象,内容就是abc String s4="abc"; System.out.println("s4:"+s4); } }
运行结果:
1.3 String 对象的特点
1)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
char[] chs ={'a' 'b' 'c'};
String s1=new string(chs);
String s2 = new string(chs);上面的代码中,JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的
2.3 String对象的特点
2)以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次, JVM都只会建立一个String对象,并在字符串池中维护
string s3 = "abc";
string s4 ="abc".在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考
第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象
用代码来演示一下:
package Java.test; public class test { public static void main(String[] args) { //构造方法得到对象 char[] ch={'a','b','c'}; String s1=new String(ch); String s2=new String(ch); System.out.println(s1==s2); //直接赋值得到对象 String s3="abc"; String s4="abc"; System.out.println(s3==s4); //比较字符串对象地址是否相同 System.out.println(s1==s3); } }
在内存中的显示:
运行结果:
1.4通过帮助文档查看String中的方法
方法名 | 说明 |
---|---|
public boolean equals(Object anObject) | 比较字符串的内容,严格区分大小写(用户名和密码) |
public char charAt(int index) | 返回指定索引处的char 值 |
publicint length() | 返回此字符串的长度 |
1.5字符串的比较
使用==做比较
基本类型: 比较的是数据值是否相同引用类型: 比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
代码演示一下:
package Java.test; public class test { public static void main(String[] args) { //构造方法得到对象 char[] ch={'a','b','c'}; String s1=new String(ch); String s2=new String(ch); //直接赋值得到对象 String s3="abc"; String s4="abc"; System.out.println(s3==s4); //比较字符串对象地址是否相同 System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s3==s4); System.out.println("***********"); //比较字符串内容是否相同 System.out.println(s1.equals(s2)); System.out.println(s2.equals(s3)); System.out.println(s3.equals(s4)); } }
运行结果:
案例:用户登录
需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
思路:
①已知用户名和密码,定义两个字符串表示即可
②键盘录入要登录的用户名和密码,用Scanner实现
③拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用equals()方法实现
④用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
代码演示:
package Java.test; import java.util.Scanner; public class test { public static void main(String[] args) { //用户名和密码 String username="zyy"; String password="0828"; //for循环实现多次机会 for(int i=1;i<5;i++) { //键盘录入要登陆的用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String name = sc.nextLine(); System.out.println("请输入密码:"); String pwd = sc.nextLine(); //对比 if (name.equals(username) && pwd.equals(password)) { System.out.println("恭喜你登陆成功!"); break; } else { int flag=4-i; System.out.println("很遗憾你的账号或密码输入有误!"); System.out.println("你还剩"+flag+"次机会,请重新录入:"); } } } }
运行结果: