1.1String类型的初始化
使用构造方法来初始化!
public class Test { public static void main(String[] args) { //直接初始化 String str1 = "abc"; //通过对象来初始化 String str2 = new String("def"); System.out.println(str1+str2); } }
运行后输出:
编辑
以上的代码就是对String类型的一个简单初始化,我们可以通过直接初始化和使用new一个对象来创建。无论是直接直接初始化还是创建一个对象都得把这个字符串使用""(双引号)括起来。
把一个数组构造成字符串
public class Test { public static void main(String[] args) { char[] arry = new char[]{'a','b','c'}; String str = new String(arry); System.out.println(str); } }
运行后输出:
编辑
我们知道,String是一个类。因此我们可以把一个数组new到一个String类中
1.1.1字符串的存储形式
public class Test { public static void main(String[] args) { String str = "abc"; System.out.println(str); } }
当我们初始化一串字符后打开ide的调试,发现这串字符串存在了一个名为value的数组里,但这个value数组又没有hash值。因此我们认为这个value是一个数组类型,并且value[]它只是一个变量、而且在这个数组中没有所谓的\0。
编辑
String实例化一个对象后赋值给null是什么意思?
public class Test { public static void main(String[] args) { //直接初始化 String str1 = "abc"; //通过对象来初始化 String str2 = new String("def"); System.out.println(str1+str2); //初始化为null String str3 = null; System.out.println(str3); } }
运行后输出:
编辑
当我们初始化给一个String类型变量为null时,代表这个这个变量引用值为空,因此输出的也是空。
编辑
1.1.2判断数组是否为空
判断字符串是否为空,我们可以使用Java中的isEmpty方法来实现。语法格式为:变量名.isEmpty()
public class Test { public static void main(String[] args) { String str = "abc"; System.out.println(str.isEmpty()); } }
运行后输出:
编辑 当字符串为空时返回true,当字符串不为空时返回false。
1.2字符串的长度
获取字符串的长度,我们可以使用Java中length()方法,语法格式为:变量名.length();如:
public class Test { public static void main(String[] args) { String str = "abc"; System.out.println(str.length()); } }
运行后输出:
编辑
我们也可以通过charAt方法来得到字符串中的某一元素,语法格式为变量名.charAt(下标);
public class Test { public static void main(String[] args) { String str = "abc"; for (int i = 0; i < str.length(); i++) { System.out.println(str.charAt(i)); } } }
运行后输出:
编辑以上代码,我使用charAt方法来依次访问了str中字符串的每个元素。因为在上方我们知道了,字符串在内存中是以数组的形式存储的,因此我们可以通过此方法来获取。
2.字符串之间的比较
首先我们来看一组代码:
public class Test { public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); System.out.println(str1==str2); System.out.println(str1==str3); } }
运行并输出:
编辑
以上代码当然str1和str2比较是同一个对象,而str1和str3在不同的对象。因此str1、str2、str3内容都是一样的,但比较后得到的值却不一样。我们可以参考下图来理解:
编辑
2.1compareTo方法
compareTo方法是比较两个字符串的大小并且返回两者之间相差值。
public class Test { public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; String str3 = "Abc"; String str4 = "dbc"; String str5 = "def"; //str1与str2比较 System.out.println(str1.compareTo(str2)); //str1与str3比较 System.out.println(str1.compareTo(str3)); //str1与str4比较 System.out.println(str1.compareTo(str4)); //str1与str5比较 System.out.println(str1.compareTo(str5)); } }
运行后输出:
编辑
我们可以看到,使用compareTo比较的两个字符串如果是相同就返回0,不相等就返回两个字符串第一个不相等字符之间的差值。
2.2compareTIgnoreCase方法
compareToIgnoreCase方法是不区分大小写进行比较的,语法格式为:字符串1.compareToIgnoreCase(字符串2);
public class Test { public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; String str3 = "Abc"; //str1与str2进行比较 System.out.println(str1.compareToIgnoreCase(str2)); //str1与str3进行比较 System.out.println(str1.compareToIgnoreCase(str3)); } }
运行后输出: