==以及equal
对于基本数据类型,等于正常使用
对于引用数据类型,==只是判断两个引用变量的值是否相等,也就是判断两个变量存放的地址是否相等,如果要判定两个变量引用所对应的值是否相等,应该用equal
class JavaTest
{
publicstatic void main(String[] args)
{
Stringstr1 = new String("lai");
Stringstr2 = new String("lai");
Stringstr3 = str1;
if(str1==str2)
{
System.out.println("str1==str2");
}
else
{
System.out.println("str1!=str2");
}
if(str1==str3)
{
System.out.println("str1==str3");
}
else
{
System.out.println("str1!=str3");
}
inta = 3;
intb = 3;
if(a==b)
{
System.out.println("a==b");
}
else
{
System.out.println("a!=b");
}
}
}
针对String的“+”和“+=”,是Java中唯一被重载的操作符;在Java中,不允许程序员重载操作符。
StringBuffersb = new StringBuffer();
inti = 3;
doublef = 6.32;
Stringstr1 = "lai";
sb.append(str1).append(i).append(f);
System.out.println(sb);
输出的时候可以直接写上sb,他会调用valueOf返回一个String对象,
public static StringvalueOf(Object obj)
返回Object
参数的字符串表示形式。
String delete删除终止字符的位置为要删除位置的下一个
Stringbuffer insert是指要插入位置的前面
数组
new关键字
为对象分配内存空间。
引起对象构造方法的调用。
为对象返回一个引用。
Student [] stu = new Student[3];
Classs Student
{
Int age;
StringBuffer name;
Student(int age,StringBuffer sb)
{
This.age = age;
This.name = sb;
}
}
那么new在创建的时候只干了两件事情,一个是返回一个引用,一个是在堆上分配内存,并没有调用构造函数。
写代码验证,确实如此,可以这么认为当后面接上[]的时候不会调用构造函数,当接上()时候会调用构造函数!!!
class Test
{
Test()
{
System.out.println("i'mcalled!");
}
public static voidmain(String[] args)
{
//Test test =new Test();
Test[] test =new Test[3];
test[0] = newTest();
}
}
Main函数讲解
函数调用
在Java中,传参时,都是以传值的方式进行。
对于基本数据类型,传递的是数据的拷贝;对于引用类型,传递的引用的拷贝。
Point pt;
System.out.println(pt);
答应对象的时候会返回这个对象的一个字符串,类名+
可以覆盖toString方法,返回需要答应的信息。
对象克隆
class Student implements Cloneable
{
String name;
int age;
Student(String name,intage)
{
this.name =name;
this.age = age;
}
public Object clone()
{
Object o =null;
try
{
o =super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}
class Test
{
public static voidmain(String[] args)
{
Student stu =new Student("lisi",18);
Student stu2 =(Student)stu.clone();
}
}
首先是实现Cloneable类,然后覆盖clone函数,调用父类的clone函数,super.clone
把clone函数声明为public,这样别的函数就能调用它了!
注意clone返回的是Object对象,记得把Object对象返回时要强制转换为Object类型!
注意一点clone的时候引用只是拷贝引用的地址,其实这两个引用时指向同一份内存地址,切记,因为String是一个长对象,修改的时候会重新分配一块内存,所以没有改变!不同于其它引用
只复制地址是浅层次的拷贝,如果要深层次,可以在引用所对用的那个类来实现clone方法