目录
一.String类的构造方法
1.public String()空参构造
2.public String(char[ ] ch2);(对堆区已有的值没有办法复用,数据多会浪费内存空间,而直接赋值如果已有相同数据可以复用,不会在浪费太多内存)
3.public String(byte[ ] bytes)
二.字符串的比较
1.前提基础: == 比较的是什么?
2.对象1.equals(对象2);返回boolean类型
3.对象1.equalsIgnore(对象2);返回boolean类型
总结:以后想比较字符串的内容,要用String内的方法(如:equals,equalsIgnore......)
三.练习
一.String类的构造方法
1.public String()空参构造
2.public String(char[ ] ch2);(对堆区已有的值没有办法复用,数据多会浪费内存空间,而直接赋值如果已有相同数据可以复用,不会在浪费太多内存)
传递一个字符数组,根据字符数组内容再创建一个字符串对象(因为字符串无法"修改",所以可以先将其转化为字符数组,然后在字符数组中修改,然后在重新转化成字符串)
3.public String(byte[ ] bytes)
传递一个字节数组,根据字节数组的内容在创建一个新的字符串对象(以后在网络当中传输的数据其实都是字节信息,我们一般需要将其转化成字符串,就需要这个构造了)
代码:
package Demo;
public class StringDemo {
public static void main(String[] args) {
//使用直接赋值的方式获取一个字符串对象
String s1 = "abc";
System.out.println(s1);
//空参构造
String s2 = new String();
System.out.println(1+s2+2);//s2 = "";
//传递一个字符数组,根据字符数组内容再创建一个字符串对象
char[] ch1 = {'a','b','c','d'};
String s3 = new String(ch1);
System.out.println(s3);
//传递一个字节数组,根据字节数组的内容在创建一个新的字符串对象
byte[] by1 = {97,98,99,100};
String s4 = new String(by1);
System.out.println(s4);
}
}
演示:
二.字符串的比较
1.前提基础: == 比较的是什么?
(1)在基本数据类型中,比较的是数据值
(2)在引用数据类型中,比较的是地址值
直接赋值可以复用,所以s1,s2的地址值是相同的(复用:使用堆区中同一个地址值)
2.对象1.equals(对象2);返回boolean类型
3.对象1.equalsIgnore(对象2);返回boolean类型
package Demo;
public class StringDemo1 {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = "abc";
String s3 = "ABC";
//1.使用==比较
System.out.println(s1 == s2);//false
//2.比较两个字符串内容是否相等
boolean result1 = s1.equals(s2);
boolean result2 = s1.equals(s3);
System.out.println(result1);//true
System.out.println(result2);//false
//3.比较字符串内容是否相等,忽略大小写
boolean result3 = s1.equalsIgnoreCase(s3);
System.out.println(result3);//true
}
}
键盘录入和直接赋值
为何是false?
因为s1是new出来的,所以和s2不是同一个地址
总结:以后想比较字符串的内容,要用String内的方法(如:equals,equalsIgnore......)
三.练习
已知正确的用户名和密码,请用程序实现模拟用户登录总共给三次机会,登录之后,给出相应的提示
常见错误:在比较字符串内容时使用==, 而且验证成功后没有加break;
代码:
package Demo;
import java.util.Scanner;
public class StringDemo2 {
public static void main(String[] args) {
//已知正确的用户和密码
String rightUsername = "guaiwu";
String rightpassword = "123456";
Scanner sc = new Scanner(System.in);
//判断
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String name = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
if(name.equals(rightUsername) && password.equals(rightpassword)){
System.out.println("用户登录成功");
break;
}else{
if(2-i == 0){
System.out.println("该用户已被锁定");
}else{
System.out.println("用户名或密码错误,您还有"+(2-i)+"次机会");
}
}
}
}
}
结果展示: