(Java)知其然且知其所以然系列5

写在开头

本系列内容主要涵盖我在深入学习Java过程中对一些知识点的深入理解和巩固。如果内容表达不准确或存在谬误,欢迎在评论区或私信中进行补充或指正~ 

目录

Java基础类

        String如何转换为 byte 数组

                String <=> Byte

        字符串比较?.equals() & == ?

                常量与对象在内存中的创建位置?

        StringBuilder => String的自动转换?

        StringBuilder的初始容量?

        StringBuffer 与StringBuilder?

        Scanner类的next()和nextLine()方法区别?

                next()方法

                nextLine()方法

        Scanner类的hasNext单词开头的方法,诸如hasNextLine()、hasNextInt()等方法


本篇内容旨在重新学习和加深印象关于Java基础类的内容。为便于记忆,本文内容稍有简化。

Java基础类

String如何转换为 byte 数组

 在实际工作中,网络上的数据传输就是使用二进制字节数据。因此字符串和字节数组之间的相互转换也很常用。

String <=> Byte

public class StringMethod4 {
    public static void main(String[] args) {
        String str2 = "我喜欢Java";
        System.out.println("将字符串转换为byte数组:");
        // 将字符串转换为字节数组
        byte[] ascii = str2.getBytes();
        // 遍历字节数组,打印每个元素
        for (byte aByte : ascii) {
            System.out.print(aByte + "\t");

        // Byte 转换为 String
        // 此处的ascii为上面通过字符串转换的字节数组
        String s = new String(ascii);
        }
    }
}

//输出结果:
//将字符串转换为byte数组:
//-26	-120	-111	-27	-106	-100	-26	-84	-94	74	97	118	97	

字符串比较?.equals() & == ?

public class StringMethod6 {
    public static void main(String[] args) {
        // 用两种方法创建三个内容相同的字符串
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2));
        System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));
        System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));
        System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3));
    }
}

//输出结果:
//使用equals()方法比较str1和str2的结果为:true
//使用==运算符比较str1和str2的结果为:true
//使用equals()方法比较str1和str3的结果为:true
//使用==运算符比较str1和str3的结果为:false
  • str1,str2和str3的内容都是hello,使用equals()是比较内容,其结果总是为true
  • ==运算符比较的是两个变量的地址
常量与对象在内存中的创建位置?
  • 变量名称 ==> 栈
  • 常量 ==> 常量池
  • new对象 ==> 堆


StringBuilder => String的自动转换?

Java 编译器在编译和运行期间会自动将字符串连接操作转换为 StringBuilder 操作或者数组复制,间接地优化了由于 String 的不可变性引发的性能问题。

String str = "Hello" + " " + "World";

StringBuilder的初始容量?

StringBuilder() 构造一个空字符串生成器,初始容量为 16 个字符

StringBuffer 与StringBuilder?

  • StringBuffer 是线程安全的可变字符序列;
  • StringBuffer 执行效率的下降
  • 通过对关键方法进行同步(synchronized)来实现线程安全

Scanner类的next()和nextLine()方法区别?

  • next()方法
    • 只有扫描到有效字符后才会结束输入;
    • 会自动去掉空白(例如回车、空格等),不能得到带有空格的字符串
  • nextLine()方法
    • 可以直接使用回车结束输入
      • => 当获取完字符串希望用同一对象获取int等数据时 => 可用该方法吞 “换行符”
    • 可以得到空白和带有空格的字符串

Scanner类的hasNext单词开头的方法,诸如hasNextLine()、hasNextInt()等方法

返回布尔类型。判断下一行输入是否为对应类型。

int age;
if (scanner.hasNextInt()) {
    age = scanner.nextInt();
} else {
    System.out.println("不是int类型");
}

float height;
if (scanner.hasNextFloat()) {
    height = scanner.nextFloat();
} else {
    System.out.println("不是float类型");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值