java中String的“==”和equals判断相等性

合集下载

比较两个string相等的方法

比较两个string相等的方法

比较两个string相等的方法在编程过程中,经常需要比较两个字符串是否相等。

以下是几种常见的方法:1. 使用==运算符在Java中,使用==运算符比较两个字符串是否相等,其实比较的是两个字符串的引用地址是否相等。

如果两个字符串的引用地址相等,则认为它们相等。

示例代码:String str1 = 'hello';String str2 = 'hello';if(str1 == str2){System.out.println('str1和str2相等');}2. 使用equals()方法在Java中,String类提供了equals()方法来比较两个字符串是否相等。

该方法比较的是两个字符串的内容是否相等。

如果两个字符串的内容相等,则认为它们相等。

示例代码:String str1 = 'hello';String str2 = 'hello';if(str1.equals(str2)){System.out.println('str1和str2相等');}3. 使用compareTo()方法在Java中,String类还提供了compareTo()方法来比较两个字符串的大小。

该方法比较的是两个字符串的字典序大小。

如果两个字符串相等,则返回0;如果第一个字符串大于第二个字符串,则返回正整数;如果第一个字符串小于第二个字符串,则返回负整数。

示例代码:String str1 = 'hello';String str2 = 'Hi';int result = pareTo(str2);if(result == 0){System.out.println('str1和str2相等');}else if(result > 0){System.out.println('str1大于str2');}else{System.out.println('str1小于str2');}通过以上几种方法,我们可以方便地比较两个字符串是否相等,选用合适的方法可以提高程序的执行效率。

java中string的用法

java中string的用法

java中string的用法String 类在Java中是一个很重要的类,它是一种对象,可用于存储字符串并提供相应的操作功能。

一、String的基本使用1. 定义字符串变量可以用 String s = "hello world" 或者String s = new String(“hello world”) 来定义一个字符串 s ,运行时会在字符串池中创建一个 hello world 字符串对象,然后在堆中创建一个字符串 s 对象,它指向字符串池中的字符串对象。

2. 字符串连接可以使用 + 或者 concat() 方法来连接两个字符串, concat() 是 String 类中定义的方法,用于连接两个字符串,它能返回一个新的字符串,但不会更改原来的字符串。

3. 字符串比较字符串是引用类型,使用 == 运算符来比较它们是比较地址,而不是比较内容,所以如果两个字符串的内容相同,使用 == 运算符得到的结果是 false 。

要想比较字符串的内容是否相同,可以使用 equals() 方法或者 compareTo() 方法。

4. 字符串查找Java提供了 indexOf() 和 lastIndexOf() 方法来查找字符串中某一字符出现的位置, indexOf() 方法在某个字符串中从头开始查找, lastIndexOf() 方法在某个字符串中从尾开始查找。

5. 字符串截取如果要从某一字符串中截取子串,可以调用 substring() 方法并传入起始和结束索引号作为参数,它将从起始索引号开始截取子串,到结束索引号结束。

二、String 的其他使用1. split() 方法此方法用于将一个字符串拆分为字符串数组,拆分的依据是给定的分隔符,默认情况下,此方法会忽略首尾的分割符,返回字符串数组。

2. toCharArray() 方法此方法将字符串转化为字符数组,方便后续对字符串中的每个字符单独进行操作。

java equal的用法

java equal的用法

java equal的用法在Java中,"equals"是用于比较两个对象是否相等的方法。

默认的"equals"方法只比较两个对象的引用是否相等,即它们是否指向内存中的同一位置。

如果需要比较两个对象的内容是否相等,则需要重写"equals"方法。

以下是使用"equals"方法的示例:javaString str1 = "Hello";String str2 = "Hello";String str3 = new String("Hello");// 使用默认的equals方法比较引用System.out.println(str1.equals(str2)); // 输出true,因为str1和str2指向内存中的同一位置System.out.println(str1.equals(str3)); // 输出false,因为str1和str3指向内存中的不同位置// 重写equals方法比较内容class Person {private String name;private int age;public Person(String name, int age) { = name;this.age = age;}public boolean equals(Object obj) {if (obj == this) return true; // 判断是否是同一个对象if (!(obj instanceof Person)) return false; // 判断是否是Person 类的对象Person person = (Person) obj; // 将参数转换为Person对象return .equals() && this.age == person.age; // 比较属性是否相等}}Person p1 = new Person("Tom", 20);Person p2 = new Person("Tom", 20);System.out.println(p1.equals(p2)); // 输出true,因为p1和p2的属性相等,即使它们指向内存中的不同位置。

equals与==的区别

equals与==的区别

Equals 与 == 的区别概述:A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。

B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。

C.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。

D.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。

详述:①==和equals的实质。

在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。

基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。

ng包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。

其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。

总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.或者说"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.②==操作符。

专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用==操作符。

Java的基本数据类型为(char,byte,short,int,long,float,double,boolean)。

java中需要用equals来判断两个字符串值是否相等

java中需要用equals来判断两个字符串值是否相等

java中需要⽤equals来判断两个字符串值是否相等在C++中,两个字符串⽐较的代码可以为:(string1==string2)但在java中,这个代码即使在两个字符串完全相同的情况下也会返回falseJava中必须使⽤string1.equals(string2)来进⾏判断eg:string s1="Hello";string s2="Hello";则(s1==s2)=true;因为他们指向的同⼀个对象。

eg:String s1=new String("Hello");String s2=new String("Hello");则(s1==s2)=false如果把其他变量的值赋给s1和s2,即使内容相同,由于不是指向同⼀个对象,也会返回false。

所以建议使⽤equals(),因为equals⽐较的才是真正的内容例如:String string1=new String( "aaa" );String string2=new String( "aaa" );这两个字符串当然应该是相等的。

如果⽤表达式string1==string2,则该表达式的值为false如果⽤表达式string1.equals(string2),则该表达式的值为true因此应该⽤string1.equals(string2),在if语句中就是if(string1.equals(string2)==true) //字符串相等,……string1==string2,是值相等,⽽且内存地址也相等,是完全的相等string1.equals(string2)为true,只是值相等。

Java中判断对象是否相等的equals()方法使用教程

Java中判断对象是否相等的equals()方法使用教程
public String getName() { return name; }
public double getSalary() { return salary; }
public Date getHireDay() { return hireDay; }
public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; }
System.out.println("alice1.equals(bob): " + (alice1.equals(bob)));
System.out.println(bob.toString()); } }
class Employee { public Employee(String n, double s, int year, int month, int day) { name = n; salary = s; GregorianCalendar calendar = new GregorianCalendar(year, month, day); hireDay = calendar.getTime(); }
if(getClass()!=otherObject.getClass()) return false;
如果所有的子类都拥有同一的语义,就使用instanceof检测
if(!(otherObject instanceof ClassName)) return false;
(5)将otherObject转换为相应类型的变量:
(3)检测othห้องสมุดไป่ตู้rObject是否为null,如果为null,返回false。这项检测是很必要的。

java 字符串比较的方法

java 字符串比较的方法Java中字符串比较的方法在Java编程中,字符串是常见的数据类型之一。

字符串比较是我们经常需要进行的操作之一,用于判断两个字符串是否相等或者确定字符串的顺序关系。

本文将介绍Java中字符串比较的方法,包括使用equals()方法、compareTo()方法、equalsIgnoreCase()方法和使用正则表达式进行比较。

1. 使用equals()方法进行比较equals()方法是Java中最常用的字符串比较方法之一。

该方法用于判断两个字符串是否相等,返回一个boolean类型的值。

示例代码如下:```String str1 = "Hello";String str2 = "World";if(str1.equals(str2)){System.out.println("两个字符串相等");}else{System.out.println("两个字符串不相等");}```上述代码中,通过equals()方法比较了两个字符串是否相等,如果相等,则输出"两个字符串相等";否则,输出"两个字符串不相等"。

2. 使用compareTo()方法进行比较compareTo()方法用于比较两个字符串的大小关系。

如果字符串相等,返回值为0;如果调用该方法的字符串小于参数字符串,返回值为负数;如果调用该方法的字符串大于参数字符串,返回值为正数。

示例代码如下:```String str1 = "Hello";String str2 = "World";int result = pareTo(str2);if(result == 0){System.out.println("两个字符串相等");}else if(result < 0){System.out.println("str1小于str2");}else{System.out.println("str1大于str2");}```上述代码中,通过compareTo()方法比较了两个字符串的大小关系,根据返回值的不同进行相应的输出。

Java判断两个对象是否相等

Java判断两个对象是否相等⼀、使⽤ == 与 equals== : 它的作⽤是判断两个对象的地址是不是相等。

即,判断两个对象是不是同⼀个对象。

(基本数据类型==⽐较的是值,引⽤数据类型==⽐较的是内存地址)equals() : 它的作⽤也是判断两个对象是否相等。

但它⼀般有两种使⽤情况:情况1:类没有覆盖equals()⽅法。

则通过equals()⽐较该类的两个对象时,等价于通过“==”⽐较这两个对象。

情况2:类覆盖了equals()⽅法。

⼀般,我们都覆盖equals()⽅法来两个对象的内容相等;若它们的内容相等,则返回true (即,认为这两个对象相等)。

举个例⼦:public class test1 {public static void main(String[] args) {String a = new String("ab"); // a 为⼀个引⽤String b = new String("ab"); // b为另⼀个引⽤,对象的内容⼀样String aa = "ab"; // 放在常量池中String bb = "ab"; // 从常量池中查找if (aa == bb) // trueSystem.out.println("aa==bb");if (a == b) // false,⾮同⼀对象System.out.println("a==b");if (a.equals(b)) // trueSystem.out.println("aEQb");if (42 == 42.0) { // trueSystem.out.println("true");}}}说明:String中的equals⽅法是被重写过的,因为object的equals⽅法是⽐较的对象的内存地址,⽽String的equals⽅法⽐较的是对象的值。

==和equals


if(c.equals(h)){
System.out.println(c.Type);
System.out.println(h.Type);
System.out.println("Cattle Equals Horse");
}
}
public class EqualsTest{
public static void main(String[] args)
{
Cattle c=new Cattle("I'm the Cattle",4);
Horse h=new Horse("I'm the Horse",4);
“return (this == obj)”;
而到了我们自己编写的类,对象相等的标准由我们确立,于是就不可避免的要覆写
继承而来的public boolean equals(Object obj);
如果您有过编覆写过equals()的经验(没有过也不要紧),请您思考一个问题:
}
public boolean equals(Object o){
if(this.Legs==((Horse)o).Legs){
return true;
}
return false;
{
String Type;
int Legs;
//相等的标准:腿的数目相等
public Cattle(String Type,int legs){
this.Type=Type;
this.Legs=legs;
int Legs;
//相等的标准:腿的数目相等

==和equals的区别

在讲 == 和 equals 的区别前我们需要确认一下 Java 中的数据类型。

在Java中有基本数据类型和引用数据类型两种。

1、8种基本数据类型:四种整数类型(byte、short、int、long)两种浮点数类型(float、double)一种字符类型(char)一种布尔类型(boolean)2、引用数据类型:除了上面我们说的 8 种基本数据类型外,其他在Java中出现的类型都是引用数据类型。

如我们自己写了一个Dog类,而在上面说的8种基本数据类型中不包括Dog类型,所以Dog类型是隶属于引用数据类型的。

==的理解:要理解 == 我们学要从两个方面来理解:(1) == 两边为 8 种基本数据类型时:当 == 两边为8种基本数据类型时, == 判断的是两边变量中存放的内容是否相等。

例:public class Test {public static void main(String[] args) {int a = 10;int b = 10;if (a == b) {System.out.println("变量a和变量b中的值相等");}}}上面的例子的运行结果是在控制台中输出"变量a和变量b中的值相等" 我们可以看出当== 两边为8种基本数据类型时比较的时内容换句话说就是比较变量的值。

(2) == 两边为引用数据类型时:当 == 两边为引用数据类型时,== 判断的是引用数据类型的对象的内存地址是否一样,如果 == 比较的内存地址一样表示 == 两边是同一个对象,否则 == 两边不是同一个对象。

例:public class Test {public static void main(String[] args) {//在8中数据类型中没有String类型所以String是属于引用数据类型的String str1 = new String("abc");//在这里在创建一个str2对象让他的值和str1一样String str2 = new String("abc");//我们在用 == 来进行判断会发现 str1 == str2条件不成立我们可以看出这里比较的不是str1和str2的值if (str1 == str2) {System.out.println("对象str1和对象str2是同一对象,他们的内存地址相同");} else {System.out.println("对象str1和对象str2不是同一对象,他们的内存地址不相同"); }}}equals的理解:equals的理解就容易多了,equals他是一个方法,而方法只有对象才能拥有,所以equals 的左边一定是一个对象他的语法格式因该是:对象名.equals(比较的内容)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
String s2=”kv” + “ill”;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
结果为:
true
true
首先,我们要知道Java会确保一个字符串常量只有一个拷贝。
因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以
false //虽然执行了s1.intern(),但它的返回值没有赋给s1
true //说明s1.intern()返回的是常量池中”kvill”的引用
true
最后我再破除一个错误的理解:
有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局Strin
g表中,如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说
例3:
String s0= “kvill”;
String s1=new String(”kvill”);
String s2=new out.println( s0==s1 );
System.out.println( “**********” );
s1.intern();
System.out.println( s1==s2 );
结果为:
false
false
false
例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创
建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译
期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果
s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连
接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常
量,所以s2也是常量池中”kvill”的一个引用。
所以我们得出s0==s1==s2;
用new String()创建的字符串不是常量,不能在编译期就确定,所以new String()
6.关于String是不可变的
这一说又要说很多,大家只要知道String的实例一旦生成就不会再改变了,比如说:
String str=”kv”+”ill”+” “+”ans”; 就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”kvill”又和” “ 生成 ”kvill “存在内存中,最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的
在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的
一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
看例1:
String s0=”kvill”;
String s1=”kvill”;
的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的
字符串,则将自己的地址注册到表中”是错的:
看例4:
String s1=new String("kvill");
String s2=s1.intern();
System.out.println( s1==s1.intern() );
s1==s1.intern()为false说明原来的“kvill”仍然存在;
s2现在为常量池中“kvill”的地址,所以有s2==s1.intern()为true。
5.关于equals()和==:
这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。
s2=s2.intern(); //把常量池中“kvill”的引用赋给s2
System.out.println( s0==s1);
System.out.println( s0==s1.intern() );
System.out.println( s0==s2 );
结果为:
false
**********
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );
结果:
false
kvill kvill
true
在这个类中我们没有声名一个”kvill”常量,当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。
了。
4. String.intern():
再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern(
)方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了
1. 首先String不属于8种基本数据类型,String是一个对象。
因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
3. String str=”kvill”与String str=new String (“kvill”)的区别:
创建的字符串不放入常量池中,它们有自己的地址空间。
看例2:
String s0=”kvill”;
String s1=new String(”kvill”);
String s2=”kv” + new String(“ill”);
System.out.println( s0==s1 );
System.out.println( s0==s2 );
相关文档
最新文档