String类
创建字符串对象的2种方式:
1、直接使用 " " 定义。(推荐方式)。
String name = "小王";
2、通过String类的构造器创建对象。
(1)public String():创建一个空白字符串对象,不含有任何内容(几乎不用)。
//s1 = " " String s1 = new String(); System.out.println(s1);
(2)public String(String):根据传入的字符串内容,来创建字符串对象(几乎不用)。
String s2 = new String("小王子"); System.out.println(s2);
(3)public String (char[] c):根据字符数组的内容,来创建字符串对象。
char[] chars = {'a' ,'b', '小', '王'}; String s3 = new String(chars);
(4)public String(byte[] b):根据字节数组的内容,来创建字符串对象。
byte[] bytes = {97, 98 ,99}; String s4 = new String(bytes);
有什么区别?
1、以 "" 方式给出字符串对象,在字符串常量存储,而且相同内容只会在其中存储一份。
2、通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
例:
1 String ss1 = "abc"; 2 String ss2 ="abc"; 3 System.out.println(ss1 == ss2);//ture 4 5 char[] chars1 = {'a', 'b', 'c'}; 6 String ss3 = new String(chars1); 7 String ss4 = new String(chars1); 8 //因为地址不一样,所以不相同 9 System.out.println(ss3 == ss4);//false
String常见面试题:
1、
1 //new了两个对象,“”给出的会放在常量池, new出来的会放在堆内存 2 String s5 = new String("abc"); 3 //这个创建了0个,因为常量池有了“abc” 4 String s6 = "abc"; 5 System.out.println(s5 == s6);//false
2、
1 //s8它是变量,只有在运行的时候才会去分配变量空间的地址 2 String s7 = "abc"; 3 String s8 = "ab"; 4 String s9 = s8 + "c"; 5 System.out.println(s7 = s9);//flase 6 7 System.out.println("-------------"); 8 9 //java存在编译优化机制,程序在编译时"a" + "b" + "c" 会直接转换成“abc” 10 String sss1 = "abc"; 11 String sss2 = "a" + "b" + "c"; 12 System.out.println("sss1 = sss2");//ture
String常用API
字符串不适合用 ==比较,因为这样是比较的地址。
所以我们可以用String提供的equals方法比较
什么时候适合用==比较数据,基本数据类型比较时使用。
例子:
1 //正确的账号和密码 2 String okname = "xiaowang"; 3 String okpassword = "123456"; 4 5 //用户输入 6 Scanner scanner = new Scanner(System.in); 7 //用户输入账号 8 System.out.println("账号:"); 9 String name = scanner.next(); 10 11 //用户输入密码 12 System.out.println("密码:"); 13 String password = scanner.next(); 14 15 //判断输入是否正确 16 if (okname.equals(name) && okpassword.equals(password)){ 17 System.out.println("登录成功!"); 18 }else{ 19 System.out.println("账号或密码错误!"); 20 } 21 22 //忽略大小写比较内容的API:一般用于验证码 23 String okSode = "123A"; 24 25 System.out.println("验证码为123A,请输入:"); 26 String sode = scanner.next(); 27 28 if (okSode.equalsIgnoreCase(sode)){ 29 System.out.println("验证码正确!"); 30 }else{ 31 System.out.println("验证码错误!"); 32 } 33 scanner.close(); 34 } 35 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)