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
+=它会先把后面的转化为和前面的同一个类型后再求和