电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

在String中==和equals的区别


发布日期:2019/8/31
 
下面是源代码(存为Java文件编译运行推敲下结果)

public class DosShell {

public static void main(String[] args) {

// 开始测试了

Systemoutprintln(Hello world);

//定义两个对象并初始化

String c = Check equal method;

String d =Check ;

//这样d 和 c是一样的麽?

d += equal method;

Systemoutprintln(cequals(d)的结果并不表示c和d到底是不是引用的一个对象因为它被重载了结果+ (cequals(d)));

Systemoutprintln(c==d的结果表示c和d到底是不是引用的一个对象结果+ (c==d));

//intern方法是干什么的呢?原来是返回 常量池 中的常量的引用(如果没有就创建一个)那么下面的结果是什么呢?

Systemoutprintln(use intern method c==cintern()> + (c==cintern()));

Systemoutprintln(use intern method d==cintern()> + (d==cintern()));

Systemoutprintln(use intern method c==dintern()> + (c==dintern()));

Systemoutprintln(use intern method d==dintern()> + (d==dintern()));

//原来c直接是引用的常量池中而d不是难怪c!=d;

//下面这个简单

String s = ;

String s = ;

Systemoutprintln(String s = \\String s = \\);

Systemoutprintln(s==s: + (s==s));

Systemoutprintln(sequals(s): + sequals(s));

Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));

//让s的引用变一下

s = ;

Systemoutprintln(s = \\;);

Systemoutprintln(s==s: + (s==s));

Systemoutprintln(sequals(s): + sequals(s));

Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));

//原来都是true都是引用的常量池如果这样呢?

s = newString();

Systemoutprintln(s = newString(\\););

Systemoutprintln(s==s: + (s==s));

Systemoutprintln(sequals(s): + sequals(s));

Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));

//new 方法在堆中创建了一个新的对象而s引用了它不再是原来引用的常量池了

//看看这个结果

s = new String();

Systemoutprintln(s);

//这个语句相当于s = new String();和下面的不一样

String s = null;

Systemoutprintln(s);

//再来看看intern方法说明了什么??

String s = new String();

Systemoutprintln(use intern method s==sintern()> + (s==sintern()));

//new 在堆创建了了个对象当然和常量池的不一样了啊

}

}本文出自 CTOCOM技术博客

上一篇:高效获取jpeg图片的尺寸

下一篇:Server Socket通信简单的实例分析