目录

一.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);
    }
}

演示:

java中string构造 java string类构造方法_开发语言

二.字符串的比较

1.前提基础: == 比较的是什么?

(1)在基本数据类型中,比较的是数据值

(2)在引用数据类型中,比较的是地址值

直接赋值可以复用,所以s1,s2的地址值是相同的(复用:使用堆区中同一个地址值)

java中string构造 java string类构造方法_java_02

 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
    }
}

java中string构造 java string类构造方法_jvm_03

键盘录入和直接赋值

java中string构造 java string类构造方法_字符串_04

为何是false?

因为s1是new出来的,所以和s2不是同一个地址

总结:以后想比较字符串的内容,要用String内的方法(如:equals,equalsIgnore......)

 三.练习

已知正确的用户名和密码,请用程序实现模拟用户登录总共给三次机会,登录之后,给出相应的提示

常见错误:在比较字符串内容时使用==,   而且验证成功后没有加break;

java中string构造 java string类构造方法_字符串_05

代码:

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)+"次机会");
                }
            }
        }

    }
}

结果展示:

java中string构造 java string类构造方法_java_06