==
我们先来介绍一种关系运算符"==":该运算符用来判断值是否相等:如果在基本数据类型中,由于变量与值同在栈中,所以比较的是值是否相等
package pro;
public class Test {
public static void main(String[] args) {
int a=12;
int b=12;
System.out.println(a==b);
}
因为a和b中的数值相等,所以输出结果为true。
如果为引用类型,因为变量中存的是对象的地址,所以比较的是地值是否相等:
package pro;
public class Test {
public static void main(String[] args) {
Object object1=new Object();
Object object2=new Object();
System.out.println(object1==object2);
}
因为创建的两个对象的地址不同,所以输出结果为false;
引用类型直接赋值:赋值的内容本身存放在常量池中
创建对象的方式存储在堆中,两种方式的型变量存储在栈中,都是存放的引用内容的地址
对于字符串内容:name.length name.startsWith(" “) endsWith name.equals(” ")派生忽略大小写的字符串
indexOf方法获取某个字符串在原来字符串的位置,从0开始
lastIndexOf方法获取某个字符串在原来字符串的位置,从0开始从后先前,找最后出现的
substring 输出需要创建对象String sum=letters.substring
String equals只是比较内容是否相同,如果创建的方式不同参照的是equals方法的第二种情况,先判断是否为字符串,然会下转型(需要比较length)比较长度是否相等,左后比较每个字符是否相等
name.trim返回去掉字符串左右两边的空格,中间不行
引用对象在堆中,数值或地址的值在栈中
String类是引用数据类型,该类实例化字符串创建方式有两种:
直接赋值,其语法格式如下:
public class Test {
public static void main(String[] args) {
String str="北京";
System.out.println(str);
}
构造方法实现其实例化,其语法格式如下:
public class Test {
public static void main(String[] args) {
String adress =new String("北京");
System.out.println(str);
}
String类实例化的两种方式是有区别的:
1、直接赋值,这种方式会出现常量池数据共享的现象(对象存入常量池中;当jvm创建字符串对象前先会去常量池中找有没有一个字符串内容与当前字符串相同,有:将已有地址赋给变量,无:创建新的对象):
public class Test {
public static void main(String[] args) {
String name1="tom";
String name2="tom";
String name3="Tom";
System.out.println(name1==name2);
System.out.println(name1==name3);
输出结果为true
false因为name2和name1的内容相同, JVM会先比较两者内容是否相同,相同的话将已经存在的地址赋给变量,name3的内容之前不存在,所以会创建新的对象。
2、new(创建新对象构造方法):直接存入堆内存;每new一次就会创建一个新的对象
public class Test {
public static void main(String[] args) {
String adress=new String("北京");
String adress2=new String("广东");
System.out.println(adress==adress2);
}
每次都创建一个新的对象,所以内容不相同,输出结果将会为false
常用方法
1、length() 该方法返回字符串的长度(包括空格):
public static void String() {
String name="tom";
System.out.println(name.length());//输出字符串的长度
}
2、startsWith(String value) 判断字符串是否以value字符串开头,如果是返回true,否则返回false:
endsWith(String value) 判断字符串是否以value字符串结尾,如果是返回true,否则返回false:
public static void String() {
String str="USA";
System.out.println(adress.startsWith("US"));//输出true or false
}
3、equals(String targetString) 用于判断两个字符串是否相同,完全相同返回true,否则返回false:
public static void String() {
String name="tom";
String name2="tom";
System.out.println(name .equals(name2));//判断内容是否相同
}
String 类equals方法和==区别:
如果所比较的两个变量是引用类型,则==用于比对两个变量指向的是否为同一个存放数据的地址;如果是基本数据类型的两个变量进行比较,则比较的是值是否相等:
**4、equalsIgnoreCase (String value) 用于判断两个字符串忽略大小写后是否相同,相同返回true,否则返回false: **
public static void String() {
String name="tom";
String name2="tom";
String name3="Tom";
System.out.println(name.equalsIgnoreCase(name3));//忽略大小写的情况下判断内容是否相同
}
5、toCharArray() 将字符串转换为char类型的数组:
public static void String() {
String address="USA";
char[]letters=adress.toCharArray();//{'U''S''A'}
for (char letter : letters) {
System.out.println(letter);
}
6、trim()取消字符串前后两端的空格
public static void String() {
String adress=" USA ";
System.out.println(adress.trim().length());//trim取消两端空格
}
7、split():将一个字符串按照指定的字符串进行分割,返回字符串数组
public static void String() {
String mobiles="110#120,119";
String []strs =mobiles.split("#");//{"110""120""119"}将字符串按照某种方式分割成字符串数组
for (String str:strs) {
System.out.println(str);
}
8、replaceAll():将字符串中某些指定的字符串替换成指定的新的字符串
public static void String() {
String mobiles="110#120,119";
mobiles=mobiles.replaceAll("#", ",");
System.out.println(mobiles);
}
9、charAt ():从0开始返回指定参数对应的字符
public static void String() {
String address="USA";
char letter=adress.charAt(1);
System.out.println(letter);//从1开始返回指定参数对应的字符
}