目录
一.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)+"次机会"); } } } } }
结果展示: