String s0="java";
String s1="ja";
String s2=s1+"va";
String s3="ja"+"va";
String s4=new String("java");
System.out.println(s0==s2);
System.out.println(s0==s3);
System.out.println(s0==s4);
System.out.println(s2==s4);
int i0=11;
Integer i1=new Integer(11);
System.out.println(i0==i1);
char c='a';
Integer i2=new Integer(97);
System.out.println(c==97);
System.out.println(c==i2);
结果:
false
true
false
false
true
true
true
System.out.println(s0==s2); false
System.out.println(s0==s3); true
System.out.println(s0==s4); false
System.out.println(s2==s4); false
常量池:s0,s1,s3
堆内存:s2,s4
s0和s3指向String缓冲区里同一个对象,所以true
s0比较s2和s4还需要比较地址,所以false——只有八种基本类型和对应的类比较,才会解封装比较,比如下面的int两个值比较就是true
s2和s4地址不同,肯定false
System.out.println(i0==i1); true
八种基本数据类型比较时,会解封装
System.out.println(c==97); true
System.out.println(c==i2); true
char类型底层是通过 UnicodeData 文件中的信息定义的,当int和char两者存在比较的时候,会转变成同种类型比较,不同方法,转变的类型不同。
System.out.println(4>5?'c':97);
结果是'a'
三目运算的时候冒号左右会先进行比较,所以97变成了a, int转变成char类型比较
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(char a){
System.out.println(a);
}
public static void charr(int a){
System.out.println(a);
}
上面是没有异常的
***********
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(int a){
System.out.println(a);
}
结果是:
99
97
运行也是可以的
***********
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(char a){
但这样就会报错,97需要强转
调用函数的时候char类型会变成int类型比较,但int不能找到匹配的调用函数
String s1="ja";
String s2=s1+"va";
String s3="ja"+"va";
String s4=new String("java");
System.out.println(s0==s2);
System.out.println(s0==s3);
System.out.println(s0==s4);
System.out.println(s2==s4);
int i0=11;
Integer i1=new Integer(11);
System.out.println(i0==i1);
char c='a';
Integer i2=new Integer(97);
System.out.println(c==97);
System.out.println(c==i2);
结果:
false
true
false
false
true
true
true
System.out.println(s0==s2); false
System.out.println(s0==s3); true
System.out.println(s0==s4); false
System.out.println(s2==s4); false
常量池:s0,s1,s3
堆内存:s2,s4
s0和s3指向String缓冲区里同一个对象,所以true
s0比较s2和s4还需要比较地址,所以false——只有八种基本类型和对应的类比较,才会解封装比较,比如下面的int两个值比较就是true
s2和s4地址不同,肯定false
System.out.println(i0==i1); true
八种基本数据类型比较时,会解封装
System.out.println(c==97); true
System.out.println(c==i2); true
char类型底层是通过 UnicodeData 文件中的信息定义的,当int和char两者存在比较的时候,会转变成同种类型比较,不同方法,转变的类型不同。
System.out.println(4>5?'c':97);
结果是'a'
三目运算的时候冒号左右会先进行比较,所以97变成了a, int转变成char类型比较
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(char a){
System.out.println(a);
}
public static void charr(int a){
System.out.println(a);
}
上面是没有异常的
***********
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(int a){
System.out.println(a);
}
结果是:
99
97
运行也是可以的
***********
public static void main(String[] args) {
charr('c');
charr(97);
}
public static void charr(char a){
但这样就会报错,97需要强转
调用函数的时候char类型会变成int类型比较,但int不能找到匹配的调用函数
本文深入探讨了Java中字符串的存储方式、常量池与堆内存的区别,并详细解析了不同类型变量之间的比较机制,包括基本数据类型与包装类实例间的比较。
171万+

被折叠的 条评论
为什么被折叠?



