String比较 运用String.equals

首先定义四个变量str

public class SIzhui {
    public static void main(String[] args) {
        String str1="wang";
        String str2="li";
        String str3="wang";
        String str4=new String("wang");

}

}

然后进行比较

public class SIzhui {
    public static void main(String[] args) {
        String str1="wang";
        String str2="li";
        String str3="wang";
        String str4=new String("wang");

        System.out.println(str1==str2);
        System.out.println(str1==str3);
        System.out.println(str1==str4); 

}

}

每定义一个String类型,就会在内存中开辟一块空间

此处比较的是4个变量的地址

所以输出

因为变量str1和变量str3赋给的值都为“wang”;

所以这两个的值被自动存入同一个常量池,

所以此时比较str1和str3,输出的是true;

str4赋给的值同样是“wang”,

但是str4=new string,也就是说,此处“wang”被放到一个新开辟的堆内存中,而不会存入常量池,所以此处输出false。

如果想比较两个String型变量的值,就用到一个String.equals。这个方法就是用来比较字符串。

public class SIzhui {
    public static void main(String[] args) {
        String str1="wang";
        String str2="li";
        String str3="wang";
        String str4=new String("wang");

        System.out.println(str1.equals(str4));
}

}

结果

时间: 2024-08-26 20:34:15

String比较 运用String.equals的相关文章

String和StringBuffer的equals方法比较

String再熟悉不过了,通常考点在常量池上面. String和StringBuffer的区别,平时也只留意到一个是final类(String),字符串不可变:一个是普通类(stringbuffer),字符串可变.除此之外还有什么区别呢?下面来看看String和StringBuffer的区别,直接上代码: String s="abc"; String t=new String("abc"); System.out.println(s==t); System.out.

String类中的equals()方法

在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值. equals 比较的是值,==比较的地址以及值. 01: public class StringExample02: {03: public static void main (String args[])04:   {05: String s0 = "Programming";06: String s1 = new String ("Programming");07: String s2 =

String的hashCode 和equals 区别

网上找到特么一段话: Java对于equals方法和hashCode方法是这样规定的: 1.如果两个对象相等,那么它们的hashCode值一定要相等: 2.如果两个对象的hashCode相等,它们并不一定相等.PS:相等说的是equals方法. 那么这2个方法是什么来的?? 先祭出源码. equals源码: /** * Compares this string to the specified object. The result is {@code * true} if and only if

C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)

一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: 1.string name = value; if (name == null) { name = string.Empty; } 2.使用三元操作符(? :)对上面对吗进行优化: string name = value == null ? string.Empty : value; 上面的两种方式 的代码不够简洁,?? 操作符来进行进一步优化,?? 操作符意

string和new string()的区别,以及equals与==的去别

import java.util.Scanner; public class TestScanner { public static void main(String[] args) { //Java会确保一个字符串常量只有一个拷贝 String str1="hello"; String str2="hello"; //输出true System.out.println(" "+(str1==str2)); //输出true System.out

String类型的==和equals问题及常量池小结

public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; final String str3 = "ab"; String str4 = "ab"; String str5 = str3+"c"; String str6 = str4+"c"; String str7 = &quo

String s=new String("xyz");创建几个String对象的问题

首先让我们了解几个概念: 栈 :由JVM分配区域,用于保存线程执行的动作和数据引用. 堆 :由JVM分配的,用于存储对象等数据的区域. 常量池constant pool :在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.这是一个特殊的共享区域,可以在内存中共享的不经常改变的东西,都可以放在这里. 进入正题: String a = "abc";①String b = "abc";② 使用String a = "abc

java中String s="abc"及String s=new String("abc")详解

1.   栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2.   栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共 享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要 在运行时动态分配内存,存取速度较慢. ==是判断

String str=new String("abc")到底创建了几个对象

这句代码到底创建了几个对象?研究了好一阵,现在才能说清楚. package com.sun.test; public class Test<T> { T a; /** * @param args */ public static void main(String[] args) { String str=new String("abc"); } } 我们来看下这段简单代码的字节码: <pre name="code" class="java