String 引用类型
1,String类型是引用类型。
1. String s = "aaa";
这段代码,JVM创建了一个变量引用S,在堆中创建了一个对象aaa,将aaa放进常量池中,s指向aaa.
2,“==”和equals的区别
1. ==可以用来比较基本类型和引用类型,判断内容和内存地址
2. equals只能用来比较引用类型,它只判断内容。该函数存在于老祖宗类 java.lang.Object
3,java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,
JVM中代码表示
1. String str1="Tulun";
2. String str2="Tulun";
3. System.out.println(str1==str2);//true
4. System.out.println("-----------");
因为Str1和str2 指向的是同一个地址,所以该代码输出true
1. String str3=new String("Tulun");
2. String str4=new String("Tulun");
3. System.out.println(str3==str4); //false
因为str3和str4指向的不是同一个地址
1. String str5="Tulun";
2. String str6=new String("Tulun");
3. System.out.println(str5==str6);//false
1. String str7="Tu"+"lun";
2. String str8=new String("Tulun");
3. System.out.println(str7==str8);//false
1. String str7="Tu"+new String("lun");
2. String str8=new String("Tulun");
3. System.out.println(str7==str8);//false
1. char[] array={'T','u','l','u','n'};
2. String str9=new String(array);
3. String str10="Tulun";
4. System.out.println(str11==str22);//false
equals方法原码
1. public boolean equals(Object anObject) {
2. if (this == anObject) { //判断是不是同一个引用
3. return true;
4. }
5. if (anObject instanceof String) { //判断类型是否相同
6. String anotherString = (String)anObject;
7. int n = value.length;
8. if (n == anotherString.value.length) { //判断长度是否相同
9. char v1[] = value;
10. char v2[] = anotherString.value;
11. int i = 0;
12. while (n-- != 0) { //判断每个字符是不是一样
13. if (v1[i] != v2[i])
14. return false;
15. i++;
16. }
17. return true;
18. }
19. }
20. return false;
21. }
1.先比较引用,引用相等直接true
否则的话:
1.比较类型
2.比较长度
3.把string转成char[], 依次比较每一个字符,全部相等则为true,否则为false。
1. 假设有以下代码 ----腾讯
2. String s = "hello";
3. String t = "hello";
4. char c[] = {'h', 'e', 'l', 'l', 'o'};
5.
6. s.equals(t);
7. t.equals(c);//false
8. s==t;
9. t.equals(new String ("hello"))
t.equals(c)输出的值为负数
1,t,c的引用地址不同
则判断其类型是否相同,因为一个是String一个是char[]数组。所以输出为false
类型转换面试题
选:B
A:99后面不用加S,因为这句话要执行自动装箱,调用shortValue()方法,这个方法显然不能或者99S的值
C:1.0后面需要加上f 因为系统默认的浮点数是double型
D:17后面不用加c
选:D
8进制不能有8
选:A
S+1为int,不能直接赋值给short
+=它会先把后面的转化为和前面的同一个类型后再求和