网易云课堂Java模拟面试笔记(1-10)

1.用==比较String

String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
Syso(a == b);
Syso(c == d);
Syso(a == c)
//true false false 
//a和b创建为引用,指向同一地址
复制代码

** ==比较引用类型时,比较的是虚地址。String类型比较特殊,当使用=赋值时,相同内容的字符串本质是同一个对象,虚地址相同。而使用new赋值时,每次都会创建一个新的对象。**

2.String类用=赋值

public static void change(String str){
    str = "abc";
    Syso("change_str="+str);
}
public static void main(String[] args){
    String str = "123";
    change(str);
    Syso("main_str="str);
}
//change_str=abc
//main_str=123
复制代码

** String是引用类型,是比较特殊的类,是只读对象。对String有任何改变,都将返回一个新的对象。**

3.用equals比较String

public static void main(String[] args){
    String str1="abc";
    String str2="abc";
    
    String str3=new String("abc");
    String str4=new String("abc");
    
    Syso(str1.equals(str2));
    Syso(str3.equals(str4));
    Syso(str1.equals(str3));
}


//equals 在 object类中定义 
//equals 比较的是两个对象的虚地址,只有当虚地址一样时才会返回true
//但是在部分类中会重写equals,如String
//在String中,equals比较的是两个String的值
//true true true
复制代码

** equals()方法是在Object类中定义的,Java API中的类都默认有该方法,默认情况下是比较两个对象的虚地址。但是很多类对其进行了覆盖。String类就将equals方法进行了覆盖,修改为比较两个字符串的字符序列,只要字符序列相同的字符串,返回值就为true。**

4.如何判断一个String是不是一个空字符串

if(str != null && str.equals(""))
//要判断字符串是否为空,否则当字符串没有初始化时,会出现空指针错误
复制代码

** null指的是空指针,而空字符串指的是str已经被初始化,不过值为空,即""。在判断的时候,一定判断其不是空指针,再调用equals判断其字符序列是否为空,否则会发生空指针异常。**

5.字符串的不可变性质

String bar="abc";
bar.toUpperCase();
Syso(bar);
//abc
//bar = bar.toUpperCase();  则输出ABC
//字符串调用任何方法是不能改变字符串的值
复制代码

** 字符串类具有不可变的性质,也就是一旦一个字符串被初始化到内存中,其值就不会被改变。对它调用任何方法都将返回一个新的对象。**

6.字符串与基本数据类型的转换

题目:有字符串变量str="123",如何转换成int类型123?
    String str="123";
    int i = Integer.parseInt(str);
复制代码

** 在实际应用开发过程中,经常需要把字符串转换成整型或浮点型的数值进行运算。Integer/Double等包装器类都定义了parseXXX方法,可以进行转换。**

7.使用new关键字创建字符串对象

题目:String str = new String("abc");创建了几个对象?
复制代码

** 创建了两个或一个对象。 由于字符串是一个非常常用的类型,所以JVM中存在一个字符串常量池,保存了大量的字符串对象,并共享使用。使用new String("abc");创建对象时,如果常量池中没有abc,首先会在对象池中创建字符串abc,然后在堆中创建字符串对象,赋值给str。如果常量池中已经有abc,则创建一个对象。**

8.用==比较字符串常量

题目:下面语句输出结果是什么?
Syso("china"+"soft"=="chinasoft");
//true
String str1 = new String("abc");
String str2 = new String("abc");
Syso(str1==str2);
//false
复制代码

** ==比较的是引用的虚地址。对于字符串常量来说,存在于字符串共享池里,只要字符串序列相同的字符串,在共享池莉都被“合并”,引用同一个对象,所以虚地址也相同。**

9.把基本数据类型转换成String

题目:有变量int i = 123;如何把i转换成String对象?
int i = 123;
String str = String.valueOf(i);
Syso(str);
复制代码

** String类中重载了一系列的valueOf方法,方法参数为boolean、int、float、double等基本数据类型,方法为静态方法,返回值为字符串,可以把参数转换成String对象。**

10.如何比较String的字典顺序

题目:有字符串 str1="international",str2="chinasoft"
      如何使用代码比较他们的字典顺序?

String temp = "";

String str1 = "international";
String str2 = "chinasoft";

if(str1.compareTo(str2)>0){
    temp  = str2;
    str2 = str1;
    str1 = temp;
}
Syso(str1+" "+str2);
复制代码

** compareTo方法是接口中Comparable定义的,API中很对类都对其进行了实现。String类实现了该接口,重写了compareTo方法。该方法用来比较字符串的字典顺序,返回值为正数,表示str1大于str2,即字典中str1排在str2后。返回值为负数,表示str1小于str2.返回值为0,表示相同。**

转载于:https://juejin.im/post/5b5922cfe51d453488137fe7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值