有个小问题不明白,求高手赐教? "=="与equals()的区别中r22和r32为什么会和别的答案不一样? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Takecare是哪一个类?在同一个包中么? equals方法检查两个字符串的内容是否相等,比如:String str1 = new String("AAA");String str2 = str1;那么str1.equals("AAA")和str1.equals(str2)肯定返回true因此你的例子中,声明的所有的对象内容都是"china"故而,返回均true。而==运算符比较两个对象是否引用相同的实例;比如你的例子中:Strint s1="china";s1引用了一段静态内存,其中存储的信息是"china",而:Strint s3=new String("china");为s3在堆栈中声明了一个字符串对象;二者显然引用的不是同一个对象,因此s1==s3肯定返回false楼主明白了? 至于这个:float c=tc.a+b; //这句话不明白,为什么能够访问a,a怎么能加b为什么不能够访问a,a为什么不能加b呢? a.equals(b);指a和b的值相等,若是字符串就是字符串的内容相同。是两个对象的所有属性相同而a==b说明a和b指向同一个对象,即指向同一块内存地址。boolean r11=s1.equals(s2);//输出 r11 trueboolean r12=s1==s2; //r12 true在这里把s1和s2共享一个字符串chinag来节省内存而s3则系统重新分配了内存给s3所以s3!s1上面说的不一定完全准确,不过大致意思就是这样的,楼主可以参考《java pitfalls》 回——————至于这个:float c=tc.a+b; //这句话不明白,为什么能够访问a,a怎么能加b为什么不能够访问a,a为什么不能加b呢? 很简单,因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用,至于b为什么可以用,我相信不用我来说啦! ==和equals在字符串的比较和对象的比较时,有所不对!比较字符串是还要注意java中的一个字符串池的概念,和实例化的过程不一样! 在java VM过通过你实例化赋值的方法不对,会对不同的字符串对象做不同的存贮! 我相信你经过上面的一段程序应该已有所了解啦! 多看书,分析程序!你的水平会越来越好的! ==是比较地址boolean r22=s1==s3;boolean r32=s1==s4; s1和s3,s4在内存中分配的地址都不相同 谢谢大家 tanzheng617(追梦人)中所说的"因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用"那你这句话,我是不是可以引申为,如果a是static的话,那就能直接引用了。可以不通过对象了。不知我这样说对吧。还有就是a,b类型不同能够相加,那我程序写成public class Takecare{ static int a=90; static float b=10.78f; public static void main(String args[]) { float c=a+b; System.out.println("c="+c); } }不再申明一个对象,不是程序更简洁吗。 如果全用表态的,那就会造成你内存的开销增大! 这就是时间(运行时间)和空间(内存的占用)以及数据的封装(如果不是private类型)啦! 这个不是几句话可以说得清的! 姐姐,哥哥们,菜鸟又来问一个关于return的问题。 想破头啦,关于父类强转成子类的问题 这个装饰类为什么不能实现大写输出 新手解惑 一个让我头痛的问题哦,大家帮帮俺了。 [求助]请问如何输出所有汉字?还有字符映射表中的其他字符? 请大家帮忙 有没有像JB那样可以生成本地可执行程序的免费工具 怎样都一个字符串 我的HelloWorld Applet在Appletviewer中正常,在IE中是空白 问一个线程的简单问题(新手,初来贵宝地,请多指教!) jsp调用Oracle存储过程
String str1 = new String("AAA");
String str2 = str1;
那么str1.equals("AAA")和str1.equals(str2)肯定返回true
因此你的例子中,声明的所有的对象内容都是"china"故而,返回均true。而==运算符比较两个对象是否引用相同的实例;比如你的例子中:
Strint s1="china";
s1引用了一段静态内存,其中存储的信息是"china",而:
Strint s3=new String("china");
为s3在堆栈中声明了一个字符串对象;
二者显然引用的不是同一个对象,因此
s1==s3肯定返回false楼主明白了?
float c=tc.a+b; //这句话不明白,为什么能够访问a,a怎么能加b为什么不能够访问a,a为什么不能加b呢?
而a==b说明a和b指向同一个对象,即指向同一块内存地址。
boolean r11=s1.equals(s2);//输出 r11 true
boolean r12=s1==s2; //r12 true
在这里把s1和s2共享一个字符串chinag来节省内存
而s3则系统重新分配了内存给s3所以s3!s1
上面说的不一定完全准确,不过大致意思就是这样的,楼主可以参考《java pitfalls》
为什么不能够访问a,a为什么不能加b呢?
很简单,因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用,至于b为什么可以用,我相信不用我来说啦!
==和equals在字符串的比较和对象的比较时,有所不对!比较字符串是还要注意java中的一个字符串池的概念,和实例化的过程不一样! 在java VM过通过你实例化赋值的方法不对,会对不同的字符串对象做不同的存贮!
我相信你经过上面的一段程序应该已有所了解啦!
多看书,分析程序!你的水平会越来越好的!
boolean r22=s1==s3;
boolean r32=s1==s4;
s1和s3,s4在内存中分配的地址都不相同
tanzheng617(追梦人)中所说的
"因为a不是你在main方法中申明的,同时a是属于对象的,所以你不能在main中直接引用非静态的变量和方法,只能通过对象来引用"
那你这句话,我是不是可以引申为,如果a是static的话,那就能直接引用了。可以不通过对象了。不知我这样说对吧。
还有就是a,b类型不同能够相加,那我程序写成
public class Takecare
{ static int a=90;
static float b=10.78f;
public static void main(String args[])
{
float c=a+b;
System.out.println("c="+c);
}
}不再申明一个对象,不是程序更简洁吗。
这就是时间(运行时间)和空间(内存的占用)以及数据的封装(如果不是private类型)啦! 这个不是几句话可以说得清的!