int i=2006;
byte b=(byte)i;
System.out.println(b); //为什么是-42 不是214;String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false我的环境JDK1.5+JCreator,请各位帮忙解释解释,谢谢!
byte b=(byte)i;
System.out.println(b); //为什么是-42 不是214;String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false我的环境JDK1.5+JCreator,请各位帮忙解释解释,谢谢!
判断符"=="是判断两个对象是否相等,是否指向同一个字符串.
public static void main(String s[]){
int i=2006;
System.out.println(Integer.toBinaryString(i));
byte b=(byte)i;
System.out.println(Integer.toBinaryString(b));
System.out.println(b);
}
} class A{
public static void main(String s[]){
int i=2006;
System.out.println(Integer.toBinaryString(i));
byte b=(byte)i;
System.out.println(Integer.toBinaryString(b));
System.out.println(b);
}
}
输出:
G:\>java A
11111010110
11111111111111111111111111010110
-42
节取2006的底8位,11010110,最高位是1,被看作是负数!!
2. String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
结果是:G:\>java A
false
楼主可能看错了
2.唯一的解释是编译器作了优化,String的intern方法可将字符串加到string pool
class A{
public static void main(String s[]){
String s1=new String("中国.四川");
s1.intern();
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
}
}
结果是:false
class A{
public static void main(String s[]){
String s1=new String("中国.四川");
String s3=s1.intern();
System.out.println(s1==s3); //为什么是true 不是false
}
}
结果是:false
class A{
public static void main(String s[]){
String s1="中国.四川";
String s3=s1.intern();
System.out.println(s1==s3); //为什么是true 不是false
}
}
结果是:true
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
你这样写的结果是false,而不是true.因为“==”比较的是地址,你为这两个字符串开辟了两个空间,地址当然不同。如果你如下写的话,返回的就是true,因为他们的指针指向的都是同一个地址:
String s1 = new String("中国.四川");
String s2;
s2 = s1;
System.out.println(s1==s2);当然如果你如下写的话,返回的自然就是true了,因为他们比较的是字符串的内容:
String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1.equals(s2));
第二问题 看错了结果
谢谢各位,下次一定小心。