Java - null 和空字符串的区别,数组的增删改查
5.4、null 和空字符串的区别 (面试题)了解
null :表示没有在内存中开辟任何空间
注意:
- 不要使用 null 对象去调用任何的方法和属性!!
- 如果你认为对象可能会是 null 的,那么就要进行非 null 判断
if(对象 != null)
- null 可以参与比较,但是不能调用方法和属性:if (对象 . equals(null))
空字符串:表示开辟了内存空间,但是没有任何内容,是空的
- 可以调用任何的方法和属性
//一般在进行非空判断时,进行两种空判断
String userName = "";
if (str != null && !str.equals("")){
System.out.println("用户名合法!");
}else {
System.out.println("用户名不能为空!");
}
注意:数组中有 null ,在判断学生位置时需要注意判断条件
错误写法:if (stuNames[i].equals(studentName))
正确方法:if (stuNames[i] != null && stuNames[i].equals(studentName))
或者:if(studentName.equals(stuName[i])) //null 可以作为被比较对象
5.5、数组的高级应用
数据查找
//编写一个main方法
public static void main(String[] args) {
//教室有5个位置只坐了四个人,输入要查找的学生姓名,
//如果找到了这个同学,则输出该同学的座位号
//如果没有找到,则显示查无此人
//定义一个变量接收用户输入
Scanner input = new Scanner(System.in);
System.out.print("请输入需要查找的学生姓名:");
String studentName = input.next();
int flagIndex = -1; //定义一个变量用来存储学生的位置
//创建存放学生姓名的数组
String[] stuNames = {"张三","李四","赵强","王五",null};
for (int i = 0; i < stuNames.length; i++) {
if (studentName.equals(stuNames[i])){
flagIndex = i + 1;
break;
}
}
if (flagIndex == -1){
System.out.println("查无此人!!");
}else {
System.out.println(studentName + "同学的位置是:" + flagIndex);
}
}
注意:数组中有 null ,在判断学生位置时需要注意判断条件
错误写法:if (stuNames[i].equals(studentName))
正确方法:if (stuNames[i] != null && stuNames[i].equals(studentName))
或者:if(studentName.equals(stuName[i])) //null 可以作为被比较对象
数据新增
//教室有5个位置只坐了四个人,输入要新增的学生姓名,
//1)如果找到了空位置,就把该同学安排到该位置上
//2)如果没有空位置,提示班级已满,没有空位置!
//3)最后输出本班的学生座位表。
//思路
// if for 找到空,把名字给空
//else 没有空
//输入新增同学名字
Scanner input = new Scanner(System.in);
System.out.print("输入新增学生姓名:");
String newStudentName = input.next();
//原本的数组
String[] stuNames = {"tom","jack",null,"rose","brown"};
int findIndex = -1; //存储新同学的位置
//循环遍历找到空位置
for (int i = 0; i < stuNames.length; i++) {
if (stuNames[i] == null){
stuNames[i] = newStudentName; //把新学生姓名赋给空位置
findIndex = i;
break;
}
}
if(findIndex == -1){
System.out.println("坐满了,没有空位置");
}else {
for (String stuName : stuNames) {
System.out.print(stuName + "\t");
}
}
删除数据
// 教室里有5个位置,目前只坐了4个同学,然后输入要删除同学的名字
// 1)如果要删除的同学不存在,提示查无此人,无法删除!
// 2)删除之后输出本班的学生座位表。
//输入删除同学名字
Scanner input = new Scanner(System.in);
System.out.print("输入被删除学生姓名:");
String delStudentName = input.next();
//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储删除同学的位置
//for 找到删除的同学
for (int i = 0; i < stuNames.length; i++) {
if (delStudentName.equals(stuNames[i])){
findIndex = i;
for (int j = findIndex; j < stuNames.length - 1; j++) {
stuNames[j] = stuNames[j+1];
}
stuNames[stuNames.length - 1] = null;
break;
}
}
//判断有无此人
if (findIndex == -1){
System.out.println("查无此人");
}else {
for (String stuName : stuNames) {
System.out.print(stuName + "\t");
}
}
任意位置插入数据
/*
* 教室里有5个位置,目前只坐了4个同学,然后输入要插入新同学的名字
* 1)输入在哪个同学前面插入新同学
* 2)如果该同学不存在,提示查无此人,插入失败!
* 3)最后输出本班的学生座位表。
* */
//思路
//旧同学的位置为 fiindIndex ,赋给新同学
//减序,从后往前,把前一个给后一个
Scanner input = new Scanner(System.in);
System.out.print("输入新学生姓名:");
String newStudentName = input.next();
System.out.print("输入旧学生姓名:");
String oldStudentName = input.next();
//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储旧同学的位置
//把名字排好位置
for (int i = 0; i < stuNames.length; i++) {
if (stuNames[i] != null && stuNames[i].equals(oldStudentName)){ //字符串的比较一定要用 equals !!!
findIndex = i;
for (int j = stuNames.length - 1; j - 1 >= findIndex; j--) {
stuNames[j] = stuNames[j - 1];
}
break; //找到了旧同学的位置就不需要再进行外层循环了。
}
}
//输出
if (findIndex == -1){
System.out.println("不存在" + oldStudentName + "这个同学");
}else {
stuNames[findIndex] = newStudentName;
for (String stuName : stuNames) {
System.out.print(stuName + "\t");
}
}
修改数据
//教室有5个位置,目前只有了4个同学,然后输入新同学的名字
// 1)输入被替换同学的名字
// 2)如果被替换同学不存在,提示查无此人,替换失败!
// 3)最后输出本班的学生座位表。
Scanner input = new Scanner(System.in);
System.out.print("输入新学生姓名:");
String newStudentName = input.next();
System.out.print("输入被替换的学生姓名:");
String oldStudentName = input.next();
//原本的数组
String[] stuNames = {"tom","jack","rose","brown",null};
int findIndex = -1; //存储被替换的同学的位置
for (int i = 0; i < stuNames.length; i++){
if (oldStudentName.equals(stuNames[i])){
stuNames[i] =newStudentName;
findIndex = i;
break;
}
}
if (findIndex == -1){
System.out.println("查无此人,替换失败!");
}else {
System.out.println(Arrays.toString(stuNames));
}
5.7、冒泡排序
规则:
把数组中前后2个元素进行比较,(升序排序的话),把大的数往后排,把小的数往前排;交换元素的位置,然后再把后面的元素前后
再依次比较。
案例
int[] arr = {47,89,56,34,98,23};
System.out.println(Arrays.toString(arr)); //把数组中的元素打印出来
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
本文来自博客园,作者:Thecong,转载请注明原文链接:https://www.cnblogs.com/hwphwc/p/16464428.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!