equals , instanceof和String常见API 的使用,外加一个验证码开发的小项目

equals

public class proking01 {
    public String name;
    public int age;
    public int age01=10;
    public int age02=10;

    public  proking01(String name,int age){
        this.age=age;
        this.name=name;
    }

    public String toString(){
        return "姓名为:"+name+"\t年龄为:"+age;
    }
}

 测试类中使用

public class proking02 {
    public static void main(String[] args){
        proking01 proking03=new proking01("proking01",22);
        proking01 proking04=new proking01("proking01",22);
        boolean a=proking03.name.equals(proking04.name);
        /*   底层实现的源码  就是在比较内存地址
           public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }  这里"this"为proking03.name,后者才是proking04.name
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }
          */
        System.out.println(a);  //判断两个名字是否相等
        System.out.println(proking03==proking04);//这样就是在判断两个属性的内存地址是否相等
        /*
        equals比较的是两个对象的内容是否相等。
        注:默认情况下,Object类中的equals()方法返回的是 == 的判断,如果没有对Object类中的该方法进行覆盖,那么仍然会调用Object类中的方法。
        例如,proking01类对equals方法进行了覆盖,改为判断两个字符串内容是否相同。
        * */
    }

instanceof

public class Animal {
    public void eat(){
        System.out.println("我是父类吃方法");
    }
}
public class Cat extends Animal{
    public void eat(){
        System.out.println("我是猫类吃方法");
    }
}
public class Dog extends Animal{
    public void eat(){
        System.out.println("我是狗类吃方法");
    }
}
public class test {
    public static void main(String[] args){
        Animal dog=new Dog();
        Animal cat=new Cat();
        System.out.println();
        //判断和猫类型
        if(dog instanceof Cat){
            System.out.println("是同一类型");
        }else{
            System.out.println("不是同一类型");
        }
        System.out.println("---------------------------");
        //判断和动物类型
        if(dog instanceof Animal){
            Animal animal=(Animal)dog;
            System.out.println("强转成功");
            animal.eat();
            System.out.println("是同一类型");
        }else{
            System.out.println("不是同一类型");
        }

        //以后尝试强转时要使用instanceof判断,不然可能会出现抛出异常的现象

        //判断对象引用是否为该类型,(自身类,父类,objec类)都是属于
        /*
    instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例。
    1.如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,
    或者 object 是 null,则返回 false。class可以是类,可以是接口。
    2.instanceof在Java的编译状态和运行状态是有区别的:
    2.1在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
    2.2在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。
    但是class为子类时编译不会报错。运行结果为false。 (大致就是判断表达式:class 变量=(class)object的引用 是否成立)。
    *****使用接口也是相同的道理,语法格式直接把父类换成接口即可
        * */
    }
}

String

public class proking01 {
public static void main(String[] args){
    //在Java中使用""定义的字符串对象,会储存在字符串常量池中,相同的会指向同一个内存地址
    //使用构造器new一个新的对象出的两个相同字符串的内存地址不同
    String s1="abc";
    String s2="abc";
    System.out.println(s1==s2);
    System.out.println("===============================================");
    String s3=new String("123");
    String s4=new String("123");
    System.out.println(s3==s4);
    //两个比较的是内存地址
    //对于栈空间来说,如果两个接收器的内容相等,则在堆内存中不会在创建一个相同的地址,故指向同一内存
    //使用构造器new一个新的对象相当于在堆内存中又创建一个对象,故会重新赋一个内存地址,在堆内存中分开储存

    //String中常用的API
    // 1、public int length(): 获取字符串的长度
    String name = "我爱你中国love";
    System.out.println(name.length());
    System.out.println("===============================================");
    // 2、public char charAt(int index): 获取某个索引位置处的字符
    char c = name.charAt(1);
    System.out.println(c);

    System.out.println("------------遍历字符串中的每个字符--------------");
    for (int i = 0; i < name.length(); i++) {
        char ch = name.charAt(i);
        System.out.println(ch);
    }
    // 3、public char[] toCharArray():: 把字符串转换成字符数组
    char[] chars = name.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        char ch = chars[i];
        System.out.println(ch);
    }
    System.out.println("===============================================");

    // 4、public String substring(int beginIndex, int endIndex) :截取内容,(包前不包后的)
    String name2 = "Java是最厉害的编程语言!";
    //              01234567   89
    String rs = name2.substring(0, 9);
    System.out.println(rs);
    String rs1 = name2.substring(4, 9);
    System.out.println(rs1);
    System.out.println("===============================================");

    // 5、public String substring(int beginIndex):从当前索引一直截取到末尾
    String rs2 = name2.substring(4);
    System.out.println(rs2);
    System.out.println("===============================================");

    // 6、public String replace(CharSequence target, CharSequence replacement) //替换
    String name3 = "金三胖是最厉害的80后,金三胖棒棒的!我好爱金三胖";
    String rs3 = name3.replace("金三胖", "***");
    System.out.println(rs3);
    System.out.println("===============================================");

    // 7、public boolean contains(CharSequence s)
    System.out.println(name3.contains("金三胖")); // true
    System.out.println(name3.contains("金二胖")); // false
    System.out.println("===============================================");

    // 8、public boolean startsWith(String prefix)
    System.out.println(name3.startsWith("金三胖"));
    System.out.println(name3.startsWith("金三胖是最厉害的"));
    System.out.println(name3.startsWith("金三胖是最厉害的2"));
    System.out.println("===============================================");

    // 9、public String[] split(String s): 按照某个内容把字符串分割成字符串数组返回。
    String name4 = "王宝强,贾乃亮,陈羽凡";
    //特殊情况下  * ^ : | . \  这些符号作为分隔符需要加上转义符号\\否则会出现代码异常

    String[] names = name4.split(",");
    for (int i = 0; i < names.length; i++) {
        System.out.println("选择了:" + names[i]);
    }
}
}

验证码获取验证项目

//验证码开发项目
import java.util.*;
public class Proking01 {
    public static void main(String[] args){
        //人工输入验证码
        for(int i=1;i<5;i++) {
            //首先随机生成验证码
            String a01 = "asdfghjkl";
            Random r = new Random();
            String a02 = "";
            for (int j = 1; j <= 5; j++) {
                int index = r.nextInt(a01.length());
                char a03 = a01.charAt(index);
                a02 += a03;
            }
            System.out.println("验证码为:" + a02);
            //手动输入验证码
            System.out.println("请输入5位验证码:");
            Scanner in = new Scanner(System.in);
            String a03 = in.nextLine();
            //开始判断条件
            if (a02.equalsIgnoreCase(a03)) {
                System.out.println("恭喜你输入的验证码正确,成功进入系统!!!");
                break;
            } else {
                    System.out.println("很抱歉输入错误,请重新输入!");
            }
        }
    }
}
        //使用三元运算符直接判断输入的验证码和系统随机生成的验证码是否相同
        //        System.out.println("请输入5位验证码:");
        //            Scanner in=new Scanner(System.in);
        //            String a03=in.nextLine();
        //        System.out.println(a02.equalsIgnoreCase(a03)?"您输入的验证码正确!!!":"很抱歉,你的验证码有误");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值