1.java的数据类型分两大类:
基本类型和
引用类型.
基本类型有:
整数类型,浮点类型,字符类型char (2Byte),布尔类型boolean (1bit).
整数类型又分:
字节型byte (1Byte),短整型short (2Byte),整型int (4Byte),长整型long (8Byte).
浮点类型分为:
单精度型float (4Byte),双精度型double (8Byte).
引用类型有:
字符串String,数组[],类class,接口interface.
2.
Java函数参数传递的理解
http://www.cjsdn.net/post/print?bid=1&id=91403
Java函数参数是值传递的。
. 如果参数是基本类型,函数不能改变参数的值。
. 如果参数是对象,函数可以改变参数的属性。
. 如果参数是对象,函数不能使参数指向新的对象。
3.java函数的参数传递都是,总是传值的.对于基本类型就是传值毫无疑问;对于引用类型,也可以说是传值,一个对象的引用,地址相仿的东西.
4.一个例子:
package com.method.test;
class OutClass
{
String name;
int number;
OutClass(String name,int number)
{
this.name=name;
this.number=number;
}
}
public class TestMethod {
static public void changeInt(int i)
{
i = 9;
}
static public void changeFloat(float f)
{
f = 99.0f;
}
static public void changeString(String s)
{
s = "after changed";
}
static public void newString(String s)
{
s = new String("new String");
}
static public void changeStringB(StringBuffer sb)
{
sb.append("add postfix");
}
static public void newStringB(StringBuffer sb)
{
sb = new StringBuffer("new StringBuffer");
}
static public void changeClass1(OutClass oc)
{
oc.name = "hk";
oc.number = 10000;
}
static public void changeClass2(OutClass oc1,OutClass oc2)
{
OutClass temp ;
temp = oc1;
oc1 = oc2;
oc2 = temp;
}
static public void changeClass3(OutClass oc)
{
OutClass temp = new OutClass("BeiJing",10);
oc = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int originInt = 0;
float originFloat = 0.0f;
String cString = "originCString 0";
String nString = "originNString 0";
StringBuffer csb = new StringBuffer("originCsb 0");
StringBuffer nsb = new StringBuffer("originNsb 0");
OutClass c1 = new OutClass("GZ",20);
OutClass c2_1 = new OutClass("zq",758);
OutClass c2_2 = new OutClass("jm",750);
OutClass c3 = new OutClass("yf",766);
System.out.println("originInt:"+originInt);
System.out.println("originFloat:"+originFloat);
System.out.println("cString:"+cString);
System.out.println("nString:"+nString);
System.out.println("csb:"+csb);
System.out.println("nsb:"+nsb);
System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
System.out.println();
System.out.println();
changeInt(originInt);
changeFloat(originFloat);
changeString(cString);
newString(nString);
changeStringB(csb);
newStringB(nsb);
changeClass1(c1);
changeClass2(c2_1,c2_2);
changeClass3(c3);
System.out.println("originInt:"+originInt);
System.out.println("originFloat:"+originFloat);
System.out.println("cString:"+cString);
System.out.println("nString:"+nString);
System.out.println("csb:"+csb);
System.out.println("nsb:"+nsb);
System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
}
}
结果:
originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0
nsb:originNsb 0
c1.name:GZ;c1.number:20
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766
originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0add postfix
nsb:originNsb 0
c1.name:hk;c1.number:10000
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766
5.注意以上的String,StringBuffer.特别是String 是对+ ,= ,== ,等符号进行了重载的.
6.基本类型,和类对象的区别.
基本类型的所有相同值变量的值都是程序常量表中的一个引用,如int i = 1;int j =1;
其中的i,j都等于1所以表中同一常量的引用.而String s1 = newString("hello");String s2 = new String("hello");虽然它们的值都相同,但是它们是类对象是没有常量表的,所以不是同一引用.但String类是特别的,程序有个字符串常量表,当String s1 = "hello";或String s2 = new String("hello").intern()时是加入字符串常量表的.
public class TestString {
public static void main(String[] args) {
int i,j,k;
i =5000;
j=5000;
k=j;
System.out.println(i==j);
System.out.println(k==j);
System.out.println(i==k);
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = s1;
System.out.println();
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s2==s3);
String ss1 = "hello";
String ss2 = new String("hello");
String ss3 = new String("hello").intern();
System.out.println();
System.out.println(ss1==ss2);
System.out.println(ss1==ss3);
System.out.println(ss2==ss3);
}
}
true
true
true
false
true
false
false
true
false