Java常用类

41 篇文章 0 订阅

字符串面试题

1.下面代码中共生成了几个对象

String s = new String("333");

答:两个,因为生成了一个“333”在方法区里的常量池中,生成了new出来的对象在堆内存中,还有一个s是在栈内存中的,但是他不属于对象,因为他不会有回收机制,他是属于线程的。

2.加上String s2 = new String("333");

答:三个对象,因为333是同一个对象,new出来的对象是新的一个对象


String,StringBuffer,StringBuilder

String是不可变字符串

StringBuffer和StringBuilder是可变字符串

可变字符串主要用于大量的字符串拼接的时候。

StringBuffer:可变字符串,是线程安全的,但是效率比StringBuilder效率低,适用于多线程

扩容机制:

1.原长度*2+2

2.原长度+待添加字符长度

StringBuilder:可变字符串,线程不安全,用得较多,效率比StringBuffer高,适用于单线程

常用方法:

str.append(“hello”);

str.reverse();

面试题:String,StringBuffer,StringBuilder的联系区别

①三者都是用于操作字符串的

②String是不可变字符串,StringBuffer和StringBuilder是可变字符串

③String内置的char不能被改变,StringBuffer和StringBuilder可以被改变,且扩容机制默认是原长度*2+2

④StringBuffer是线程安全的(方法有同步关键字synchronized),StringBuilder是线程不安全的


包装类(基本数据类型的引用数据类型)

有Byte,Short,Integer,Long,Float,Double,Character,Boolean

自动装箱:从基本类型转换为对应的包装类对象

自动拆箱:从包装类对象转换为对应的基本类型

常用API

①字符串转成基本类型(character没有)

int a = Integer.parseInteger("123");

其他都是相同的

②包装类转基本类型(1.自动拆箱 2.xxxValue)

Double d = 6.0;//包装类

double d2 = d.doubleValue();

③int类型转二进制

String string1 = Integer.toBinaryString(8);

int类型转八进制

String string2 = Integer.toOctalString(8);

int类型转十六进制

String sting3 = Integer.toHexString(14);


二、BigInteger类(比long还大的类)

BigInteger b1 = new BigInteger("200000000000000000000000000000000");

BigInteger b2 = new BigInteger("200000000000000000000000000000000");

①相加

System.out.println(b1.add(b2));

②相减

System.out.println(b1.substract(b2));

③相乘

System.out.println(b1.multiply(b2));

④相除

System.out.println(b1.divide(b2));

三、BigDecimal类(精确计算小数)因为正常计算可能就精度丢失

方法跟上面的一样

四、DecimalFormat:用于格式化输出数字

①对3.1415926保留两位小数输出

System.out.println(new DecimalFormat("#.##").format(3.1415926));

②对3.1415926保留正实数输出

System.out.println(new DecimalFormat("#").format(23.1415926));//只写一个#就是取整

③对3.14保留4位小数

System.out.println(new DecimalFormat("0.0000").format(3.14));

④对31415926用科学计数法进行表示,保留一位整数  (3.1415926E7)

System.out.println(new DecimalFormat("0.0000000E0").format(31415926));

⑤百分比 12-->1200%

System.out.println(new DecimalFormat("#%").format(12));

⑥1000000--->1,000,000

System.out.println(new DecimalFormat("###,###").format(10000000));//三个一分割 后面多少都可以

⑦嵌入文本 1000--->1000RMB

System.out.println(new DecimalFormat("#RMB").format(1000));


枚举:

enum 枚举名称{

        枚举常量,枚举常量,枚举常量.....

}


hashcode

规则1:同一对象在程序同一执行时间内无论调用多少次,都返回相同的hashcode值

规则2:两对象equals方法相等,hashcode必须也相等

规则3:两对象equals方法不相等,hashcode也可能相等

哈希冲突:两不同对象的hashcode值相同即为哈希冲突,一般在使用hashmap时会出现hash冲突

面试题:

1.重写equals方法需要重写hashcode方法吗?

需要(规则2)

2.重写hashcode方法需要重写equals方法吗?

不需要

每日一句,加油打气!

压力是不可避免的,失眠是无可奈何的,所以不要着急,不要烦躁,心平气和地接受。躲不开就接着,晚上睡不着那就白天睡。

笔者是一个不会写代码的菜鸡程序员,但是希望能每天进步一点点,也能够靠着自己的努力能不断完善自我,天道酬勤!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值