1.堆内存与栈内存
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用于存放由new创建的对象和数组。
在Java代码,常常会使用到这样的类的声明实例化:
Person per = new Person();
这其实是包含了两个步骤,声明和实例化:
Person per = null; //声明一个名为Person类的对象per
per = new Person(); // 实例化这个per对象
声明指的是创建类的对象的过程;
实例化指的是用关键词new来开辟内存空间。
它们在内存中的划分是这样的:
2.字符串比较
String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致。
public class Login {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.print("请输入用户名: ");
uname=input.next();
System.out.print("请输入密码: ");
pwd=input.next();
if( uname.equals("TOM") && pwd.equals("1234567") ){
System.out.print("登录成功! ");
}else{
System.out.print("用户名或密码不匹配,登录失败!");
}
}
}
equals()方法比较原理:一对一比较
equals():检查组成字符串内容的字符是否完全一致
==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象。
例如以下代码:
public class StringDemo {
public static void main(String args[]) {
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = str2; // 引用传递
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
}
}
上方第4行代码中,new了一个对象,用“”比较str1和str2,返回的结果却是false;而用用“equals”比较str1和str2,返回的结果是true。
为了分析上面的代码,必须首先分析堆内存空间和栈内存空间,这一点非常重要:
“”和equals()的区别?
==:比较的是两个字符串内存地址(堆内存)是否相等;
equals():比较的是两个字符串的内容是否相等。
3.常用方法
- 1.字符串连接
使用“+”连接字符串:
int sqlScore = 80; //sql成绩
int javaScore = 90; //java成绩
double htmlScore = 86.7; //html成绩
String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore + " HTML:" + htmlScore;
使用String类的concat()方法,语法:A.concat(B),B字符串将被连接到A字符串后面。
String s = new String(