网易云课堂Java模拟面试笔记(11-20)

11.String与StringBuffer的区别

String str = "abc";
str.replace('a','d');
Syso(str);//abc

StringBuffer sbf = new StringBuffer("abc");
sbf.replace(0,1,"de");
Syso(sbf);//debc

str1 + str2 //String字符串拼接
sbf1.append(sbf2) //StringBuffer字符串拼接  且效率更高
复制代码

** String类是一个不可变类,一旦赋值,就不能被修改。StringBuffer是可变的字符串。字符串使用+进行追加,而StringBuffer可以使用append方法进行追加,大部分情况下,后者效率更高。**

12.StringBuffer与StringBuilder有什么区别?

** StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer相同。区别在于StringBuffer是线程安全的,多个线程同时操作StringBuffer时,能保证同步。而StringBuilder是线程非安全的。如果只在单线程环境下使用,StringBUilder的效率会更高。**

13.private修饰符

题目:下面代码哪行会出现编译错误,为什么?
public class TestPrivate{
    void doSomething(){
        private String s = "";
        int I = s.length();
    }
}
//非法的修饰符
复制代码

** 因为字符串s是一个在方法中定义的局部变量。局部变量不能使用权限访问修饰符。 权限访问修饰符包括public、protected、默认、private,其中类只能用public或者默认修饰,而类的属性、方法、构造方法可以使用四个中的任意一个修饰。方法的局部变量不能使用任何权限修饰符。**

14.do while循环及++、--

public static void main(String[] args){
    int a = 1;
    int b = 10;
    do{
        b-=a;
        a++;
    }while(b--<0);
    Syso("a="+a+" b="+b);
}
a=2,b=8
b--<0         先把b的值取出来比较,再进行--操作
do while 至少执行一次
复制代码

** do while循环最少也会执行一次循环体,知道while条件为false时退出。本题中,执行一次循环体后,循环就退出。其中a自加一次,值为2。b在循环体中被修改为10-1=9,在while中执行b--,在进行一次自减,因此为8.需要注意的是++、--不管在变量的前还是后,其实对变量本身的值都是进行加1或减1,区别是表达式的返回值不同。**

15.?:=操作符

题目:
    int a = 5;
    Syso("返回值为:"+((a<5)?9.9:9);
9.0
复制代码

** ?:是Jav中唯一的三元操作符,类似简单的if-else逻辑。如果条件返回true,则返回第一个值,否则返回第二个值。**

16:float与double

double d = 1.0;
float f = 1.0;//错误

float f = (float)1.0 / 1.0f;
复制代码

** 浮点数默认是以64位的double类型存储,而float是32位的。高精度的数值赋值给低精度的变量会发生编译错误。可以使用后缀f,或者使用(float)进行类型转换。**

17.用==比较基本数据类型

Syso(0.3 == 0.3f);
Syso(0.5 == 0.5f);
复制代码

** false true 用==比较基本数据类型,比较的是数值的二进制值。小数默认是以64位的double类型存储,因此0.3和0.3f的二进制值不同,而0.5和0.5f的二进制相同。**

18.用char存储汉字

题目:Java中的char类型,能存储汉字吗?
复制代码

** Java默认使用Unicode编码,一个汉字需要两个字节。char类型是16位,双字节,表示一个字符,因此可以存储一个汉字。但是不能存储两个字母。**

19.逻辑运算符

题目:&与&&有什么区别

&与&&都是Java中的逻辑“与”运算符,当操作符两边的表达式都是true的时候,返回true,否则返回false。区别在于&&存在短路问题,也就是说,当&&左侧的表达式返回为false,就不再运算右侧的表达式,直接返回false。
复制代码

20.移位运算符

题目:计算2*8,哪种方法效率最高?用简单代码表示。
r1 = m<<3;
r2 = m * 8;
复制代码

** Java语言中有三个移位运算符,分别是左移<<、有符号右移>>、无符号右移>>>。左移一位相当于乘以2,右移一位相当于除以2,用移位运算符进行运算,是直接对二进制进行运算,效率较高。**

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值