day13--java作业

本文深入探讨Java中StringBuffer类的使用方法,包括其与String和StringBuilder的区别,以及如何实现字符串的转换和操作。通过具体示例代码,解析StringBuffer的各种方法如append、insert、delete等,帮助读者掌握其线程安全特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A:简答题
1、把StringBuffer类中上课讲解的方法在API中进行查询,并用自己的话进行描述
答案:
public int capacity()
public int length()
public StringBuffer append(String str)
public StringBuffer insert(int offset,String str)
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
public StringBuffer replace(int start,int end,String str)
public StringBuffer reverse()
public String substring(int start)
public String substring(int start,int end)

2、如何实现StringBuffer和String的相互转换?
3、如何实现String和int数据的相互转换
4、如何实现 基本数据类型 与 基本数据封装类 之间的相互转换
5、请说明String与StringBuffer二者之间的区别?
6、请说明StringBuffer与StringBilder二者之间的区别?
B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。
1、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public void method (StringBuffer sb) {
sb.append(“StringBuffer”);
}
public void method (String str) {
str = str + “String”;
}
public static void main (String[] args) {
String str = new String(“java”);
StringBuffer buffer = new StringBuffer(“android”);

Demo d = new Demo();
d.method( str );
System.out.println( str );
d.method( buffer );
System.out.println( buffer );
}
}
2、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main (String[] args) {
if (“String”.endsWith(“”)) {
System.out.println(“True”);
} else {
System.out.println(“False”);
}
}
}

3、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main (String[] args) {
if (“String”.startsWith(“”)) {
System.out.println(“True”);
} else {
System.out.println(“False”);
}
}
}
4、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main (String[] args) {
StringBuffer buffer1 = new StringBuffer(“String”);
StringBuffer buffer2 = new StringBuffer(“String”);
if ( buffer1.equals(buffer2) ) {
System.out.println(“True”);
} else {
System.out.println(“False”);
}
}
}
5、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main (String[] args) {
StringBuffer buffer1 = new StringBuffer(“abc”);
StringBuffer buffer2 = new StringBuffer(“abc”);
String s1 = new String(“abc”);
String s2 = “abc”;

System.out.println(s1 == s2);
System.out.println(s1 = s2);
System.out.println(buffer1 == buffer2);
System.out.println(buffer1.equals(buffer2) );
}
}
6、将下面的程序补充完整
class Demo {
public static void main (String[] args) {
StringBuffer buffer = new StringBuffer(“Hello”);
//向StringBuffer对象中添加新数据”World”
________;
//向StringBuffer对象Hello与World之间插入”Java”
________;
//把StringBuffer对象中”World”删除
________;
//把StringBuffer对象中”Hello” 更改成”Hi”
________;
System.out.println( buffer.toString() );
}
}
7、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main (String[] args) {
Integer i = 100;
Integer j = 100;
System.out.println( i == j );

Integer i2 = 200;
Integer j2 = 200;
System.out.println( i2 == j2 );
}
}
8、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Demo {
public static void main(String[] args){
Integer a1 = Integer.valueOf(100);
Integer b1 = Integer.valueOf(100);
System.out.println( a1 == b1 );

Integer a2 = Integer.valueOf(156);
Integer b2 = Integer.valueOf(156);
System.out.println( a2 == b2 );

}
}
C:编程题
1、请编写数组工具类,完成冒泡排序、选择排序、并测试

解答:

package org.westos.homework.day13;

import org.junit.Test;

/**
 * *************************************
 * Copyright (c) 2018 feiyan.com
 * All rights reserved.
 * *************************************
 * *************************************
 *
 * @Author: think
 * @Project: JavaSE
 * @Date: Created in 2018/7/30 15:45
 * @Since: JDK 1.8
 * @Version: 1.0
 * @Modified By:
 * @Description:${description}
 */

public class HomeWork {

    @Test
    public static void test() {

        //A:3题
        test3();

        //B:1題
        Demo().mainMethod();
        //运行结果:
        //java
        //androidStringBuffer

        //Demo1.mainMethod();

        //Demo2.mainMethod();

        //Demo3.mainMethod();

        //Demo4.mainMethod();

        //Demo5.mainMethod();

        //Demo6.mainMethod();
//        HelloWorld
//        HelloJavaWorld
//        HelloJava
//        HiJava

        //Demo7.mainMethod();

        //Demo8.mainMethod();


        int[] arr = {3, 2, 5, 8, 4, 7, 9, 6};
        //C:冒泡排序
        //从小到大排序
        /*
        SortHub.bubbleSort(arr);
        //SortHub.bubbleSort(arr, true);
        for (int i : arr) {
            System.out.print(i);
        }

        //从大到小排序
        SortHub.bubbleSort(arr, false);
        for (int i : arr) {
            System.out.print(i);
        }
        */

        //C:选择排序
        //从小到大排序
        SortHub.bubbleSort(arr);
        //SortHub.bubbleSort(arr, true);
        for (int i : arr) {
            System.out.print(i);
        }

        //从大到小排序
        SortHub.bubbleSort(arr, false);
        for (int i : arr) {
            System.out.print(i);
        }
    }

    //A:1题
    public static void test1(){
        //描述这些方法是使用
        //      public int capacity()
        //      public int length() 
        //      public StringBuffer append(String str) 
        //      public StringBuffer insert(int offset,String str) 
        //      public StringBuffer deleteCharAt(int index) 
        //      public StringBuffer delete(int start,int end) 
        //      public StringBuffer replace(int start,int end,String str) 
        //      public StringBuffer reverse() 
        //      public String substring(int start) 
        //      public String substring(int start,int end) 
    }

    //A:2题
    public static void test2() {
        //实现StringBuffer和String的相互转换?
        StringBuffer sBuffer = new StringBuffer("smart");
        String string = "hello";

        //StringBuffer抓换成String
        String s1 = sBuffer.toString();

        //String转换成StringBuffer
        StringBuffer s2 = new StringBuffer(string);
    }

    //A:3题
    public static void test3() {
        //String和int数据的相互转换
        int a = 346523;
        String string = "67831";

        //String转换成int
        int b = new Integer(string).intValue();
        System.out.println(b);

        //int转换成String
        System.out.println(new String(Integer.toString(a)));
    }

    //A:5、6题
    /*
    String          字符串常量
    StringBuffer    字符串变量(线程安全)
    StringBuilder   字符串变量(非线程安全)
    简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,
    因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
    而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, 
    String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
    String S1 = “This is only a” + “ simple” + “ test”;
    StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
    你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
    String S1 = “This is only a” + “ simple” + “test”; 其实就是:
    String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
    String S2 = “This is only a”;
    String S3 = “ simple”;
    String S4 = “ test”;
    String S1 = S2 +S3 + S4;
    这时候 JVM 会规规矩矩的按照原来的方式去做。

    在大部分情况下 StringBuffer > String
    StringBuffer
    Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
    可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
    StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
    append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
    例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
    在大部分情况下 StringBuilder > StringBuffer
    java.lang.StringBuilder
    java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
    如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
    */
}

class Demo1 {
    public void method (StringBuffer sb) {
        sb.append("StringBuffer");
    }
    public void method (String str) {
        str = str + "String";
    }
    public static void mainMethod () {
        String str = new String("java");
        StringBuffer buffer = new StringBuffer("android");

        Demo1 d = new Demo1();
        //String类调用方法,在方法中生成了一个新的不可变的String对象,内容是"javaString";
        //但是在主方法中输出的是原来的str对象,他并没有发生变动。
        d.method( str );
        System.out.println( str );
        //StringBuffer直接操作的是原来的类对象,他有自己的字符缓冲区,会把新的内容添加到它的字符缓冲区中
        d.method( buffer );
        System.out.println( buffer );
    }
}

class Demo2 {
    public static void mainMethod() {
    //会输出true,表明String对象是以空串结尾的
        if ("String".endsWith("")) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}

class Demo3 {
    public static void mainMethod () {
    //会输出true,表明String对象是以空串开始的
        if ("String".startsWith("")) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}

class Demo4 {
    public static void mainMethod () {
        StringBuffer buffer1 = new StringBuffer("String");
        StringBuffer buffer2 = new StringBuffer("String");
        //输出false,StringBuffer对象没有重写equals方法,采用的Object类的equals方法,
        //判断(this == obj)采用的是判断对象的引用是否相等的方式,故输出False
        if ( buffer1.equals(buffer2) ) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}

class Demo5 {
    public static void mainMethod () {
        StringBuffer buffer1 = new StringBuffer("abc");
        StringBuffer buffer2 = new StringBuffer("abc");
        String s1 = new String("abc");
        String s2 = "abc";

        //比较的是地址
        System.out.println(s1 == s2);
        System.out.println(s1 = s2);
        //比较的是地址
        System.out.println(buffer1 == buffer2);
        //StringBuffer没有重写equals()方法,这里使用的是Object抽象类里面的equals()方法,判断对象的引用是否相等
        System.out.println(buffer1.equals(buffer2) );

    }
}

class Demo6 {
    public static void mainMethod () {
        StringBuffer buffer = new StringBuffer("Hello");
        //向StringBuffer对象中添加新数据"World"
        buffer.append("World");
        System.out.println( buffer.toString() );

        //向StringBuffer对象Hello与World之间插入"Java"
        buffer.insert(5, "Java");
        System.out.println( buffer.toString() );

        //把StringBuffer对象中"World"删除
        buffer.delete(9, buffer.length());
        System.out.println( buffer.toString() );

        //把StringBuffer对象中"Hello" 更改成"Hi"
        buffer.replace(0, 5, "Hi");
        System.out.println( buffer.toString() );
    }
}

class Demo7 {
    public static void mainMethod () {
        Integer i = 100;
        Integer j = 100;
        //变量值在128以内,故采用Integer的字节缓冲区,是一个对象地址
        System.out.println( i == j );

        //变量值超出128,会new一个新的Integer对象,这样不同对象有不同的对象地址
        Integer i2 = 200;
        Integer j2 = 200;
        System.out.println( i2 == j2 );
    }
}

class Demo8 {
    public static void mainMethod(){
        Integer a1 = Integer.valueOf(100);
        Integer b1 = Integer.valueOf(100);
        //调用valueOf方法来生成一个Integer对象
        //变量值在128以内,故采用Integer的字节缓冲区,是一个对象地址
        System.out.println( a1 == b1 );

        Integer a2 = Integer.valueOf(156);
        Integer b2 = Integer.valueOf(156);
        //变量值超出128,会new一个新的Integer对象,这样不同对象有不同的对象地址
        System.out.println( a2 == b2 );

    }
}

class SortHub{

    private static boolean mark = false;

    public static void bubbleSort(int[] array) {
        boolean tag = true;
        for (int i = 0; i < array.length - 1 && tag; i++) {
            tag = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                 if(mark ? (array[j] < array[j + 1]) : ((array[j] > array[j + 1]))){
                     int temp = array[j];
                     array[j] = array[j+1];
                     array[j + 1] = temp;

                     tag = true;
                 }
            }
        }
    }

    public static void bubbleSort(int[] array, boolean flag) {
        if(flag){   //从小到大排序
            mark = false;
            bubbleSort(array);
        }else{      //从大到小排序
            mark = true;
            bubbleSort(array);
        }
    }

    public static void selectSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if(mark ? (array[i] < array[j]) : ((array[i] > array[j]))){
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

    public static void selectSort(int[] array, boolean flag) {
        if(flag){       //从小到大排序
            mark = false;
            selectSort(array);
        }else{          //从大到小排序
            mark = true;
            selectSort(array);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phial03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值