• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

公共API -对象 对象 StringBuilder 数学 系统 BigDecimal


Recommended Posts

mz3l3crvghq4756.png

对象:

ToString方法

hhv1rbibjhm4757.png

xfr5p0nvra44758.png

运行结果:

h1uhrdtlakq4759.png

ToString()打印对象在堆内存中的地址。但在实际开发中,我们希望更多地看到对象的内容,所以需要重写父类的toString方法。

2.euqals方法:

2j0cnue3tb04760.png

Object的equals方法比较对象在堆内存中的地址。如果我们只想比较两个对象的内容,它们是相等的对象,那么我们需要在子类中重写equals方法:

(1)写你自己的:

1公共布尔等于(对象对象){

2 //类型一样吗?

3 if(学生的对象实例){

4 //先强制类型转换。对象的属性

5学生stu=(学生)obj

6 if(this.name.equals(stu.name)

7 this.sex==stu.sex

8 this.age==stu.age){

9返回true

10 }其他{

11返回假;

12 }

13 }其他{

14返回假;

15 }

16 }

优化:

1公共布尔等于(对象对象){

2 if(学生的对象实例){

3学生stu=(学生)obj

4返回this . name . equals(stu . name)this . sex==stu . sex this . age==stu . age;

5 }

6返回假;

7 }

您也可以右键单击正式生成的:

cblxgffigel4761.png

对象等于(Ob

ject a,Object b)方法:

先来看Object的equals方法:

33ftbzyrnvq4762.png

 

 不过这个方法有一个隐患,就是当对象str1为空时,程序会崩掉,原因:

jlrd0rljhpa4763.png

 

 我们知道,this指向当前对象,而当str1为null时,当前对象便不被指向,会被垃圾回收器回收,此时this便无法找到调用改方法的对象,所以程序会崩掉!当然str2时可以为null的,因此,建议使用Object的equals方法时,建议写为如:"123".equals(str),而不是str.equals("123")。

再来看,我们对上述代码稍作改动,使用Objects的equals方法有什么不一样的呢?

yvodvlqpd4w4764.png

 

 可以看到,程序很健壮,无论那个对象为null都不会崩掉。再来看一下Objects的equals方法源码:

pcbq3xgt3rp4765.png

 

 当对象a和b所在内存地址一样时则直接返回true,当对象a不为null时在调用equals方法,不得不说官方的思路很严谨呐,代码写的也很漂亮~

StringBuilder & String

l1lnyoo2gjv4766.png

 

 由于String对象的不可变性,可以看到,利用“+”符号连接字符串时,每加上一个字符串对象便会重新创建一个StringBuilder对象,当进行频繁的修改、拼接等操作时会严重地浪费内存资源。

gyqsj1ypw4m4767.png

 

 可以看到,StringBuilder类只会在堆内存中创建一个对象,进行拼接效率要远远高于String类。

案例:

  • 需求:设计一个方法用于输出任意数组的内容,要求输出格式为:
  • "该数组内容为:[11,22,33,44,55]"

分析:设计一个方法,要求该方法能够接收数组,并输出内容

 1 public class TestDemo {
 2     public static void main(String[] args) {
 3         int[] arr1 = null;
 4         System.out.println(printArr(arr1));
 5         int[] arr2 = {11,22,33,55,66};
 6         System.out.println(printArr(arr2));
 7         int[] arr3= {};
 8         System.out.println(printArr(arr3));
 9     }
10     public static String printArr(int[] arr){
11         if(arr == null){
12             return null;
13         }
14         else {
15             StringBuilder sb = new StringBuilder("["); //创建StringBuilder对象
16             for (int i = 0; i < arr.length; i++) {
17                 sb.append(i == arr.length -1 ? arr[i] : arr[i] + ",");
18             }
19             String ret = sb.append("]").toString(); //转换成String类型
20             return ret;
21         }
22     }
23 }

运行结果:

isedffrbtep4768.png

 Math类常用API:

nafworpnu4v4769.png

 

 结果:

vpbklquscbs4770.png

 

 System类的常用API:

douc0x0hnhx4771.png

 

 0vibmd5xsdn4772.png

 

 BigDecimal:

p0hphrv04f34773.png

 

 运行结果:

jo1k5t5bpys4774.png

Link to comment
Share on other sites