Java#10(String 类的构造方法和练习)
创始人
2024-04-09 11:56:26

目录

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

结果展示:

相关内容

热门资讯

史... 近期,细心的用户在华为应用商店下载各种应用程序时,可以发现多了一个名为“绿色应用”的图标。 点击后,...
手... 1:省电差异——重启比关机更省电苹果、安卓等智能手机的原理与电脑的开关机原理相同。 关闭手机将彻底关...
口... 谭卓峰原创作品,如有违规必受处罚。当牙医在某一方面的技能有所不足,但又想提高这方面的技能时,他可以通...
广信科技股价连续3天下跌累计跌... 2月5日,广信科技跌3.28%,截至发稿,报80.33元/股,成交1.53亿元,换手率6.38%,总...
益丰药房股价连续3天上涨累计涨... 2月5日,益丰药房涨2.46%,截至发稿,报25.37元/股,成交6.18亿元,换手率2.01%,总...