String概述:
java.lang.String类代表字符串,Java程序中的所有字符串文字(列如"abc")都为此类的对象.
String name = "我是一个小仙女"; String schoolName = "天才程序员";
String的注意点
字符串的内容是不会发生改变的,它的对象在创建后不能被更改.
String name = "我是一个小仙女"; String schoolName = "天才程序员"; System.out.println(name + schoolName);
字符串拼接产生一个新的字符串.
小结:
1.String是Java定义好的一个类,定义在java.lang包中,所以使用的时候不需要导包.
2.Java程序中的所有字符串文字(列如"abcdefg")都被实为此类的对象.
*3.字符串不可变,它们的值在创建后不能被更改.*
String构造方法代码实现和内存分析
创建String对象的两种方式:
第一,直接赋值
String name = "花.奇迹少年"
第二,new一个构造方法
package cn.wwq.StringOfCharacters; public class demo1 {public static void main(String[] args){//1.使用直接赋值的方法获取一个字符串对象String string = "aaa";System.out.println(string); //2.使用new的方式来获取一个字符串对象//空参构造:可以获取一个空白的字符串对象String str2 = new String();System.out.println("111" + str2 + "888");//""表示空字符串 //3.传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象(了解)String str3 = new String("qbcq");System.out.println(str3); //4.传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象//char是字符//需求:我要修改字符串的内容:qbc 变成 QQQ//qbc --> {'q' ,'b','c'} --> {'Q','Q','Q'}-->"QQQ"char[] char4 = {'q','b','c'};String str4 = new String(char4);System.out.println(str4); //传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象//byte是字节//应用场景:以后在网络当中传输的数据其实都是字节信息//我们一般要把字节信息进行转换,转换成字符串,此时就要用到这个构造了byte[] bytes = {97,98,99,100};String str5 = new String(bytes);System.out.println(str5);//转换成对应的字符串abcd} }
Java的内存模型
StringTable(串池)可以成为字符串串池.
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在.如果不存在:创建新的,如果存在:复用.
字符串的比较
Java的常用方法(比较)
==号比较的是什么?
基本数据类型:
基本数据类型比较的是数据值.
引用数据类型:
引用数据类型比较的是地址值.
字符串比较:
1.boolean equals方法(要比较的字符串)-->完全一样结果才是ture,否则为false
2.boolean equalslgnoreCase(要比较的字符串)-->忽略大小写的比较
package cn.wwq.StringOfCharacters; public class demo2 {public static void main(String[] args){//1.创建两个字符串对象String s1 = new String("abc");String s2 = "Abc"; //2.==号比较//基本数据类型:比较数据值//引用数据类型:比较地址值System.out.println(s1 == s2);//false //3.比较字符串对象中的内容是否相等boolean result1 = s1.equals(s2);System.out.println(result1);//false //4.比较字符串对象中的内容是否相等,忽略大小写//忽略大小写只能是英文状态下boolean result2 = s1.equalsIgnoreCase(s2);System.out.println(result2);//true} }
package cn.wwq.StringOfCharacters; import java.util.Scanner; public class demo3 {public static void main(String[] args){//1.假设人现在键盘录入一个abcScanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String str1 = sc.next();//abc 是new出来的//2.代码中再定义一个字符串abcString str2 = "abc";//3.用==比较,这两者能一样吗?System.out.println(str1 == str2);//fales} }
结论:以后只要想比较字符串的内容,就必须要用String里面的方法