public static void main(String[] args) {
// TODO Auto-generated method stub
String name = new String("Jack");
String dbValue = new String("Jack");
System.out.println(name==dbValue);
System.out.println(name.equals(dbValue));
System.out.println(dbValue.equalsIgnoreCase(name));
String str1="Tom";
String str2="Tom";
System.out.println((str1==str2)+"str1==str2");
}
上述程序将输出:
错误的
真的
真的
==str2
为什么第一个不相等? java中使用new创建的对象实际上是在堆内存中,所以两个不同的对象的地址是不同的,所以使用==比较得到的结果是false。 当使用类的方法时 比较两个对象的内容,因此结果值为 true。
方法是忽略大小写来判断两个字符串是否相等。
我们来看看为什么str1和str2可以使用==,因为双引号字符串在内存中其实是有一个匿名对象的,而且内存中只会有一份。 当给引用对象赋值时,实际上只会有这个副本,所以str1和str2指向内存中的同一块内存。
并且方法还提供在:
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "HelloJava.java";
boolean bool1 = a.endsWith(".java");
boolean bool2 = a.endsWith(".jpg");
System.out.println("bool1 = "+bool1);
System.out.println("bool2 = "+bool2);
String b = "新华社发来消息";
boolean bool3 = b.startsWith("新华社");
boolean bool4 = b.startsWith("新华书店");
System.out.println("bool3 = "+bool3);
System.out.println("bool4 = "+bool4);
}
输出结果:
布尔1=真
布尔2=假
布尔3=真
布尔4=假
这里一种是比较字符串末尾与指定字符串比较并返回bool值,另一种是从头开始比较,要根据具体情况使用相应的方法。
从字符串中删除空格:
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = " abc ";
System.out.println("["+str1+"]");
System.out.println("["+str1.trim()+"]");
String str2 = " a b c de f ";
System.out.println("["+str2+"]");
//replaceAll第一个参数为正则表达式,第二个参数为替换成的内容
System.out.println("["+str2.replaceAll("\\s", ".")+"]");
}
输出结果:[ abc ]
[ABC]
[ abc 德 f ]
[]
第一个方法是trip方法,不带参数,会去掉字符串首尾的空格,并返回去掉空格后的字符串;
第二种方法是第一个参数是正则表达式,第二个参数是替换的内容。 当然,你也可以将任意字符替换为另一个字符,注意这里的正则表达式。