当前位置: 首页 > news >正文

判断用户名是否正确

   在程序的开发过程中,经常需要判断用户输入的用户名是否正确,可以通过对比用户输入的用户名字符串是否与数据库中或者已经存在集合中的字符串相同,来决定用户输入的用户名是否正确。Java的基本数据类型可以使用“==”判断两个操作数是否相等,但是对于Java类创建的对象就不能使用这种方法来判断是否相等了。字符串是基本数据类型之外的,也就是说字符串在Java中是对象。本实例将通过字符串相等判断来实现用户名验证。实例运行效果如图

   本实例调用了String类的equals()方法来判断两个字符串内容是否相同,这个方法是从Object类中继承的。在Java语言中,默认所有类都是Object类的子类,也就是说只要是对象,都会重写或直接使用Object类的equals()方法,String类就重写了这个方法实现判断字符串内容是否相同。该方法的声明如下:

 

 

public boolean equals(Object anObject)

参数说明

anObject:与当前字符串进行比较的对象。

1)在项目中创建窗体类,在窗体中添加一个接收用户输入信息的文本框、“提交”和“关闭”两个按钮。

2)编写“提交”按钮的事件处理方法。在该方法中接收用户输入的用户名,然后判断输入,如果不是管理员用户名,并且输入的用户名是已经注册的,则显示正确提示,否则显示错误提示。代码如下:

 

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class CheckUsername extends JFrame {
    
    private JPanel contentPane;
    private JTextField usernameField;
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CheckUsername frame = new CheckUsername();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public CheckUsername() {
        setTitle("\u5BC6\u7801\u627E\u56DE");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 312, 181);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel label = new JLabel("\u7528\u6237\u540D\uFF1A");
        label.setBounds(22, 54, 58, 17);
        contentPane.add(label);
        
        usernameField = new JTextField();
        usernameField.setBounds(77, 51, 180, 23);
        contentPane.add(usernameField);
        usernameField.setColumns(10);
        
        JButton button = new JButton("\u63D0\u4EA4");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        button.setBounds(67, 88, 71, 25);
        contentPane.add(button);
        
        JButton button_1 = new JButton("\u5173\u95ED");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_1_actionPerformed(e);
            }
        });
        button_1.setBounds(165, 88, 71, 25);
        contentPane.add(button_1);
        
        JLabel label_1 = new JLabel(
                "<html>\u8BF7\u8F93\u5165\u4F60\u8981<font size=5 color=red>\u627E\u56DE\u5BC6\u7801</font>\u7684\u7528\u6237\u540D\u79F0\u3002</html>");
        label_1.setBounds(12, 14, 343, 25);
        contentPane.add(label_1);
    }
    
    protected void do_button_actionPerformed(ActionEvent e) {
        String name = usernameField.getText();// 获取用户输入
        if (name.equals("admin")) {// 判断是否管理员账号
            JOptionPane.showMessageDialog(null, "对不起,这个用户名是管理员的,不是你的");
        } else if (name.equals("mingri")) {// 判断是否注册用户
            JOptionPane.showMessageDialog(null, "该用户名对应的密码已经发送到注册时的邮箱,请查收");
        } else {// 给错误用户名的提示对话框
            JOptionPane.showMessageDialog(null, "你输入的用户名不存在,留意Caps Lock键是否按下。");
        }
    }
    protected void do_button_1_actionPerformed(ActionEvent e) {
        dispose();
    }
}

 

心法领悟066Java的字符串池。

Java虚拟机中有一个保存字符串的池,它会记录所有字符串。例如:

 

String str1="abc";
String str2="abc";
String str3=new String("abc");
System.out.println(str1==str2);
System.out.println(str1==str3);

 

这段代码中str1==str2的判断将返回true,为什么这个等式会成立呢?Java中的基本数据类型使用“==”可以判断操作数是否相等,对于对象使用这个符号判断的是两个对象的内存地址是否相同。而Java虚拟机为了提高字符串应用效率,提供了字符串池来保存字符串常量,str1创建字符串常量“abc”,这时会先检测字符串池中是否包含该字符串,如果不包含,则创建字符串常量保存到字符串池中,然后再返回。str2也赋值为字符串“abc”,这是由于字符串池中已经存在该字符串,所以不再创建,直接返回该字符串,也就是说这两个变量引用同一个字符串,那么它们的内存地址也是相同的,所以str1==str2成立。但是使用new关键字创建的字符串会新开辟内存空间,所以str1==str3不成立。

 

转载于:https://www.cnblogs.com/mrxy/p/6552966.html

相关文章:

  • loadrunner中Windows Resource没有数据或不可用
  • vue-todolist-example学习
  • javaScript事件(八)事件类型之变动事件
  • 白话机器学习
  • JavaScript的异步运行机制
  • 嵌入式软件设计第7次实验报告
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • httpclient 优化
  • PHPCMSV9上线方法及文件权限设置
  • 推理题:猜扑克牌
  • JS获取首字母
  • zabbix-----5-----自动发现的概念
  • NTP时钟同步学习记录
  • java基础知识 构造方法
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • CSS实用技巧干货
  • egg(89)--egg之redis的发布和订阅
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • k8s如何管理Pod
  • Laravel5.4 Queues队列学习
  • miaov-React 最佳入门
  • RxJS: 简单入门
  • Spark RDD学习: aggregate函数
  • vue 个人积累(使用工具,组件)
  • Vue实战(四)登录/注册页的实现
  • 搞机器学习要哪些技能
  • 前端面试之CSS3新特性
  • 前端自动化解决方案
  • 浅谈Golang中select的用法
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 怎么把视频里的音乐提取出来
  • 走向全栈之MongoDB的使用
  • 仓管云——企业云erp功能有哪些?
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 整理一些计算机基础知识!
  • #14vue3生成表单并跳转到外部地址的方式
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragma预处理命令
  • #预处理和函数的对比以及条件编译
  • (2)Java 简介
  • (23)Linux的软硬连接
  • (bean配置类的注解开发)学习Spring的第十三天
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)为C# Windows服务添加安装程序
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .axf 转化 .bin文件 的方法
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore文件—git忽略文件
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net环境下的缓存技术介绍
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @font-face 用字体画图标