关于String 的"==" a1==a2 的返回值就是true 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 和System.out.println(a1.endsWith(a2)); 的效果一样! 是不是这样的,String a1,a2时,只是定义了a1,a2是String的数据类型,和int,double一样的,它们是变量,这样当然“==”时是TRUE。如果String a1=new String("1");String a2=new String("1");时,给他们分配了地址,这时“==”是计算他们的地址是否一致,而equals则是计算他们的值是否相等…… 这是String特殊的地方.看看相关的书吧,都有解释的。 laughing说的有理!我的测试:代码1、String a1="1";String a2="1";System.out.println(a1==a2); System.out.println(a1.endsWith(a2)); 结果为:true true代码2、String a1=new String("1");String a2=new String("1");System.out.println(a1==a2); System.out.println(a1.endsWith(a2)); 结果为: false true 嗯...有道理。可是这样说就表明:当我用String a="1"时,不分配地址了?那是怎么实现的? 实际上是这样的java中间会有一种字符串共用的技术,就是说如果用new String生成一个字符串,可能会预先查找内存,如果内存中存在相同的字符串,他就会指向这个字符串,但是这个不是很稳定,所以使用==比较时,可能会相等,也可能返回false这就是sun规定使用equals比较字符串的原因 而且据"Thinking in java "说:当用到下列代码时,会新生成"2"的对象:String a = "1";a+="2";这岂不是说明当用到"2"这种常量,会分配地址给它? sure!the sentence is to judge whether the two varibles is equal.the result is a boolean 应该这样:String a1="1";String a2="1";System.out.println(a1.equals(a2)); 用 srting.equal() 比较 字符串的 知== 用来比较 两个 string对象是不是相等 "string对象是不是相等 "是不是对象的地址呢?还有其他的相等吗? String a1="1"; 实际上 a1 只是基本的数据类型;如果 String a1=new String("1"); 那么 a1 是一个对象;所以用 == 符号来比较:基本数据类型的是值的比较,而对象是地址的比较。 String在JAVA中可是对象哦!String a1="1";String a2="1";a2只是对a1的引用,不信你把a1的值改改看! String a1,a2时,只是定义了a1,a2是String的数据类型,和int,double如果String a1=new String("1");String a2=new String("1");时,给他们分配了地址,这时“==”是计算他们的地址是否一致,一般同样的程序有可能返回true,也会返回false用compareTo比较保险 不好意思,最后写错了!a1.equal(a2)应该是String值的比较,而a1==a2不仅要两个对象VALUE相等而且要指向同一地址,才会返回TRUE! 而且如果String a2="1";“1”在JVM中已经存在,那么a2就不会在开新的内存,否则会从新生成!除非用NEW Compare with two strings:http://www.csdn.net/Expert/topic/421/421093.shtm 在jvm的缓冲池中,只存在一个“1”字符窜。这样可以节约jvm的资源。 lzc98211()说的对!!!!!!!!!!同意!!!!!!!!!! String s1="a";String s2="a";String S3=s2;这里s1不等于s2 但是s2==s3但是三者值相等 String a1="1";String a2="1";程序编译的时候,在程序数据区开了一块内存存放“1”,然后a1指向它,a2也指向它。你用“==”比较a1, a2,当然是true了。如果String a1 = new String("1");String a2 = new String("1");程序编译的时候,在程序数据区开了一块内存存放“1”,然后新建一个String对象,用那块内存去初始化,让a1指向该String对象;再新建一个String对象,用那块内存去初始化,让a2指向第二个String对象;用“==”比较,则为false; //那String a1="1";String a2="2";a2="1";System.out.println(a1==a2);//会有什么结果,又作何解释?? 都是指向的同一个“1”。String是对象。如果要比值,用equal()方法更保险。 String 重定义了 Object.equals(Object obj)当两个引用类型比较时,如a1==a2,与a1.equals(a2)等同!Object实现的equals只a1和a2所指的对象相同的才会返回true,String实现的equals当a1与a2的字符相同时返同true顶上的结果之所以是true,不是String重载了"==", 而是String重定义了Object的equals() 是重载了!其他类也定义equals()之后调用“==”仍然是地址比较。java.lang.String类是特殊的的类,重载了“=”、“!=”、“>=”、“>”、“<”、“<=”、“+”运算符 是jvm做的优化,把A1,A2都指向了同一块内存地址.==比较的是A1,A2的内存地址.ruguo 是jvm做的优化,把A1,A2都指向了同一块内存地址.==比较的是A1,A2的内存.如果用NEW,JVM就会另外开辟内存空间了. a1==a2是个逻辑表达式。返回的自然是逻辑值了。不管a1 a2是什么。 CString 重载了Operator '=='! 遗弃Java和C#,intel拥抱“IT语言”intel要杀入软件领域,现在正在加紧研制新的编程语言,名字要IT语言!据初步认定,语法跟Java,C#类似,又是一个C的孙子!IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?忘记java和C#吧,直接从C++转入IT?我们拭目以待。 遗弃Java和C#,intel拥抱“IT语言”intel要杀入软件领域,现在正在加紧研制新的编程语言,名字要IT语言!据初步认定,语法跟Java,C#类似,又是一个C的孙子!IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?忘记java和C#吧,直接从C++转入IT?我们拭目以待。 String a1="1";String a2="1";中a1和a2都是字符串,都分配地址空间在System.out.println(a1==a2);中java处理的时候把“a1==a2”做为一个表达式处理了,由于a1和a2的值都为“1”所以这个表达式的值为true,而不会是“a1==a2”。Sysetem.out.println("a1==a2"); (string1==string2)是对这两个参数的比较!是一个boolean值!大家说的很好了!你应该明白了吧! String 对象没有重载 == ,我有老婆 说的很对你们去考scjp吧,考了以后就不会问这种问题了。 hyhong_h(黄黄) 都说了,我就不说了 顺便提醒大家一句String.hashcode()也被重载了,所以虽然两个String对象地址不同,但只要内容相同,hashcode也是一样的 jvm使用了string pool技术的原因。 五子棋,但是菜单不知道怎么实现??帮忙啊 如何把父类中的内容填充到子类 servlet有两种方法发送 问个大家疏忽的问题! 在java中如何自定义一个日期域,格式为:[ - - ],请赐教. 请教一个线程控制的问题. 哪位大神能帮我看看因为这个错误发不出邮件应该怎么办呢? 看看这段程序 请教!100分..... "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException异常 如何配置JBuilder的开发环境? okyhc(超时),你好!看一看这个程序,还是关于焦点的问题
System.out.println(a1.endsWith(a2));
的效果一样!
String a2=new String("1");时,给他们分配了地址,
这时“==”是计算他们的地址是否一致,而equals则是
计算他们的值是否相等……
我的测试:
代码1、
String a1="1";
String a2="1";
System.out.println(a1==a2);
System.out.println(a1.endsWith(a2));
结果为:true
true
代码2、
String a1=new String("1");
String a2=new String("1");
System.out.println(a1==a2);
System.out.println(a1.endsWith(a2));
结果为: false
true
实际上是这样的java中间会有一种字符串共用的技术,就是说如果用new String生成一个字符串,可能会预先查找内存,如果内存中存在相同的字符串,他就会指向这个字符串,但是这个不是很稳定,所以使用==比较时,可能会相等,也可能返回false这就是sun规定使用equals比较字符串的原因
a+="2";这岂不是说明当用到"2"这种常量,会分配地址给它?
the sentence is to judge whether the two varibles is equal.the result is a boolean
String a1="1";
String a2="1";System.out.println(a1.equals(a2));
== 用来比较 两个 string对象是不是相等
String a1="1"; 实际上 a1 只是基本的数据类型;
如果 String a1=new String("1"); 那么 a1 是一个对象;所以用 == 符号来比较:基本数据类型的是值的比较,而对象是地址的比较。
String a2="1";
a2只是对a1的引用,不信你把a1的值改改看!
String a2=new String("1");时,给他们分配了地址,
这时“==”是计算他们的地址是否一致,一般同样的程序有可能返回true,也会返回false
用compareTo比较保险
a1.equal(a2)应该是String值的比较,而a1==a2不仅要两个对象VALUE相等而且要指向同一地址,才会返回TRUE!
“1”在JVM中已经存在,那么a2就不会在开新的内存,否则会从新生成!除非用NEW
http://www.csdn.net/Expert/topic/421/421093.shtm
String s2="a";
String S3=s2;这里s1不等于s2 但是s2==s3
但是三者值相等
String a2="1";程序编译的时候,在程序数据区开了一块内存存放“1”,然后a1指向它,a2也指向它。你用
“==”比较a1, a2,当然是true了。如果String a1 = new String("1");
String a2 = new String("1");
程序编译的时候,在程序数据区开了一块内存存放“1”,然后新建一个String对象,用那块
内存去初始化,让a1指向该String对象;再新建一个String对象,用那块内存去初始化,让a2
指向第二个String对象;用“==”比较,则为false;
String a1="1";
String a2="2";
a2="1";
System.out.println(a1==a2);
//会有什么结果,又作何解释??
String是对象。
如果要比值,用equal()方法更保险。
当两个引用类型比较时,如a1==a2,与a1.equals(a2)等同!Object实现的equals只a1和a2所指的对象相同的才会返回true,
String实现的equals当a1与a2的字符相同时返同true顶上的结果之所以是true,不是String重载了"==", 而是String重定义了Object的equals()
其他类也定义equals()之后调用“==”仍然是地址比较。
java.lang.String类是特殊的的类,重载了
“=”、“!=”、“>=”、“>”、“<”、“<=”、“+”运算符
ruguo
如果用NEW,JVM就会另外开辟内存空间了.
不管a1 a2是什么。
据初步认定,语法跟Java,C#类似,又是一个C的孙子!
IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!
不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。
据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。
在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?
忘记java和C#吧,直接从C++转入IT?
我们拭目以待。
据初步认定,语法跟Java,C#类似,又是一个C的孙子!
IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!
不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。
据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。
在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?
忘记java和C#吧,直接从C++转入IT?
我们拭目以待。
String a2="1";
中a1和a2都是字符串,都分配地址空间
在System.out.println(a1==a2);
中java处理的时候把“a1==a2”做为一个表达式处理了,由于a1和a2的值都为“1”所以这个表达式的值为true,而不会是“a1==a2”。
Sysetem.out.println("a1==a2");
我有老婆 说的很对
你们去考scjp吧,考了以后就不会问这种问题了。
String.hashcode()也被重载了,所以虽然两个String对象地址不同,但只要内容相同,hashcode也是一样的