8.Java入门(方法重载、字符串)

方法

方法重载

  • 同一个类中定义的多个方法之间的关系
    • 多个方法在同一个类中
    • 多个方法具有相同的方法名
    • 多个方法的参数不相同,类型不同或者数量不同
    • 方法重载与返回值无关
public class MethodDemo {
    public static int sum(int a, int b) {
        return a + b;
    }
    public static int sum(int a, int b, int c) {
        return a + b + c;
    }
    public static long sum(long a, long b) {
        return a + b;
    }
}

方法的参数传递

  • 对于基本数据类型的参数,形式参数的改变不影响实际参数的值(值传递)
  • 对于引用类型的参数,形式参数的改变,影响实际参数的值(引用传递)

值传递和引用传递

  • 栈内存:负责存储变量和数值
  • 堆内存:负责存储对象
  • 值传递:传递的是变量对应的值
  • 引用传递:传递的是变量对应的地址

字符串

字符串的定义方式

  • 在java中,双引号""表示字符串
    • 字面量定义
    • 字面量(基本数据类型+字符串)
		String s = "hello";
  • 通过new关键字来创建一个对象
		String s = new String("hello");
  • 创建一个长度为0的空字符串
		String s = new String();
  • 先创建一个字符数组,然后将字符数组转为字符串
		char[] c = {'h','e','l','l','o'};
		String s = new String(c);

字符串中汉字占用的字节

  • UTF-8 3个字节
  • GBK 2个字节

UTF规定:如果一个符号只占一个字节,那么这个8位字节的第一位就为0。如果为两个字节,那么规定第一个字节的前两位都为1,然后第一个字节的第三位为0,第二个字节的前两位为10,然后如果是三个字节的话,那么第一个字节的前三位为111,第四位为0,剩余的两个字节的前两位都为10。

  • 一个汉字占用多少字节相关解释
    链接:https://www.zhihu.com/question/20451870/answer/391349703

字符串的创建特点

  • 字符串一经创建,长度不可改变
  • 当在一个字符串上拼接一个字符串时,则长度改变,即产生一个新的字符串
  • new出来的字符串即产生一个新的地址值

String对象是不可变的,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,包含修改的字符串内容,最初的String对象没有变化。

        String s = "hello";

        String s1 = new String("hello");
        String s2 = "hell" + "o";
        String s3 = "o";
        String s4 = "hell" + s3;

        System.out.println(s == s1);//false
        System.out.println(s == s2);//true
        System.out.println(s2 == s4);//false

格式化字符串

  • System.out.printf(format,…obj)
  • String.format(format,…obj)

format()和printf()等价,只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符。

%d : 整数 %s : 字符串 %f : 小数 %.3f : 保留三位小数 %x : 16进制数字
%% :对 % 进行转义

public class StringDemo3 {
    public static void main(String[] args) {
        //字符串的格式化
        int a = 3;
        int b = 4;
        //在控制台输出3+4=7
//        System.out.printf("%d + %d = %d",a,b,a+b);
        String s = String.format("%d + %d = %d", a, b, a + b);
        System.out.println(s);
    }

}

字符串的拼接

  • +
  • StringBuilder
        String s2 = "hell" + "o";
        
        StringBuilder sb = new StringBuilder();
        StringBuilder append = sb.append("hel").append("lo");
        System.out.println(append);

转字符串

  • String.valueOf(x)
  • String.valueOf(char[] , offset , count )
        int i = 10;
        String s1 = String.valueOf(i);
        System.out.println(s1);//10
        
        char[] c = {'h','e','l','l','o'};
        String s2 = String.valueOf(c, 2, 3);
        System.out.println(s2);//llo

字符串的遍历

  • charAt(index) 获取指定索引位置的字符
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身份证号码:");
        String id = sc.nextLine();
        //循环遍历字符串
        for (int i = 0; i < id.length(); i++) {
            char c = id.charAt(i);
            System.out.println(c);
        }

其他方法

  • equals() 比较两个字符串的内容是否相等
  • isEmpty() 字符串长度是否为0
  • isBlank() 字符串是否为空(包含空白字符)-- JDK11新特性
  • equalsIgnoreCase 忽略大小写比较两个字符串的内容是否相等
  • codePointAt() 获取对应字符的Ascll码值
  • indexOf 获取指定元素第一次出现的索引位置
  • lastIndexOf 获取指定元素最后一次出现的索引位置
  • contains() 判断字符串中是否包含指定字符
  • startWith() 判断字符串以…开头
  • endWith() 判断字符串以…结尾
  • comparedTo() 比较两个字符串的大小(比较首位字符的Ascll码值的大小)
  • toLowerCase() 将字符串中的英文转为小写
  • toUpperCase() 将字符串中的英文转为大写
  • substring(int beginIndex, int endIndex) 截取字符串 字符串长度为endIndex-startindex

如果一个对象指向null,那么该对象不能调用方法,否则会产生空指针异常(NullPointerException)

        //定义一个长度为0的空字符串
        String s = "";
        s = null;

        if (s.isEmpty()){
            System.out.println("字符串为空");
        }
        String s1 = "中国";
        System.out.println("中国".equals(s1));
        //不推荐,因为s1可能为空
        System.out.println(s1.equals("中国"));
        
        String s3 = "hello";
        String s4 = "Hello";
        //忽略大小写,比较两个字符串的内容是否相等,只适用于英文
        System.out.println(s3.equalsIgnoreCase(s4));//true
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值