java 中 的 == 和 equals以及堆栈的思考

本文探讨了Java中==与equals方法的区别,特别是在字符串比较时的行为差异。通过实例代码展示了基本类型与引用类型在使用这两种方式进行比较时的不同表现。

1.关于 java 中 的 == 和 equals 的比较结果,衍生基本类型和引用类型的比较特点:

众所周知,java世界内 分为两种数据类型:
1).第一种就是基础数据类型
byte short int long 整数数据类型
float double 小数数据类型
boolean 布尔类型
char 单字符类型
2).第二种为引用数据类型:
例如 String 字符串; 数组 ; 类

ok,基础知识过后,上代码先

public class day2{
    public static void main(String[] args) {
        String st1 = "lifeng";
        String st6 = "lifeng";
        String st2 = new String("lifeng");
        String st3 = new String("lifeng");
        String st4 = new String("lifeng");
        String st5 = st2;
        System.out.println("st1 equals st2-->"+(st1.equals(st2)));
        System.out.println("st2 equals st3-->"+(st2.equals(st3)));
        System.out.println("st1 equals st3-->"+(st1.equals(st3)));
        System.out.println("st1 == st2-->"+(st1==st2));
        System.out.println("st1 == st6-->"+(st1==st6));
        System.out.println("st2 == st3-->"+(st2==st3));
        System.out.println("st2 == st4-->"+(st2==st4));
        System.out.println("st2 == st5-->"+(st2==st5));
        System.out.println("st3 == st4-->"+(st3==st4));
    }
}

运行结果如下:

        st1 equals st2-->true
        st2 equals st3-->true
        st1 equals st3-->true
        st1 == st2-->false
        st1 == st6-->true       //   String st1 = "lifeng"; String st6 = "lifeng";
        st2 == st3-->false
        st2 == st4-->false
        st2 == st5-->true       //   String st5 = st2;
        st3 == st4-->false

1.很明显,equals比较的是值,只要相等就可以了.
2.1" == " 比较的是地址值.
String st1 = “lifeng”;
String st6 = “lifeng”;
匿名对象的指针问题
因为 String 类名 = “字符串值” 是匿名的,所以只要有"lifeng",会自动分配好了一个地址值.如果值相等就会指向同一个地址
如果值不相等,就会重新分配值.
2.2如果是 new 出来的字符串,堆内存会重新分配内存.比较的话是不同的

程序进入main主方法中了
main 方法先入栈,关于字符串创建对象的,有一个对象池,如果有相同的值就直接将指针指向默认值地址(堆内存).
今天的总结到这里.

``` package jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner; /** * 用户登录功能 * * 程序启动后,要求用户输入用户名密码,然后判断用户名密码 * 用该用户名密码做为过滤条件去user表中查询对应记录 * 如果查询到记录则表示登录信息与曾经注册时输入的信息一致,那么登录成功,否则登录失败。 * * SELECT id, username, password * FROM user * WHERE username='用户输入的用户名' and password='用户输入的密码' */ public class LoginDemo { public static void main(String[] args) { System.out.println("欢迎来到登录界面"); Scanner scanner = new Scanner(System.in); System.out.println("请输入用户名:"); String username = scanner.next(); System.out.println("请输入密码:"); String password = scanner.next(); if ("exit".equals(username)) { System.out.println("退出程序"); return; } try { Connection connection = DBUtil.getConnection(); Statement statement = connection.createStatement(); String sql = "SELECT * FROM user " + "WHERE username='" + username + "' AND password='" + password + "'"; ResultSet rs = statement.executeQuery(sql); if (rs.next()){ System.out.println("登录成功"); }else { System.out.println("登录失败"); } } catch (SQLException e) { e.printStackTrace(); } } }```"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:D:\IntelliJ IDEA 2024.3.4\lib\idea_rt.jar=64463" -Dfile.encoding=UTF-8 -classpath D:\java-student\JSD2502_SSM\JDBC\target\classes;C:\Users\2003q\.m2\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar;C:\Users\2003q\.m2\repository\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar jdbc.LoginDemo 欢迎来到登录界面 请输入用户名: aiania 请输入密码: 1' OR '1'='1 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1218) at jdbc.LoginDemo.main(LoginDemo.java:38) 进程已结束,退出代码为 0
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值