java基本数据类型及其他基础

1,java当中的8大基本数据类型(不包括String)byte(8位) short(16) int(32) long(64) float(32) double(64) boolean char(16为unicode){当声明变量为char的时候,char c = 'a' 转化为其他的时候会取它的编码值 int a = c 输出97}。上述的低可以自动向高转,容量大的转小的需要强制转换。基本数据类型存在于栈中,数组和引用数据类型存在于堆当中。
对于基本数据类型的声明,int a 系统会给a开辟了内存空间。
对于应用类型的声明,Apple a 系统给a存了地址,没有空间。

int a = 1;
            int b;
            b=a;
            a = 2;
            System.out.println(b);

基本类型的赋值当中,首先在常量池里新增了一个1,并且a指向它,a=b的时候,b和a指向同一个常量,a=2,这时候改变了a的地址指向,但是不影响b的地址指向。如果还有int c = 2;它首先会检测在常量池里面有没有2,有的话指向同一个,没有会新增一个2。

如果是一个引用类型的赋值,a和b共同指向堆里面的一个变量,通过a对堆发生的改变,b也会随之改变。

String解释传送门
String,如果是String s = "asd" 这时候注意不一定创建了一个对象,这时候是在栈区。如果String ss = new String("asd") 这时候是在堆区,再次new的话,用==(这是比较地址)两个new出来的不相等。

2,对于java包装类:包装类等同于一个适配器,因为在集合里面不可以放基本数据类,必须转换为包装类(jdk5后会自动转换了,所以看不到new Integer这些操作)。
同时基础数据类型不是都可以强制转换了,栗子 :int 和string
int转string(要通过integer)1,integer.toString() 2,String.valueOf() {String和integer都是代之},3,i+”“,i在运算的时候自动转换为String
(都是通过Integer,有Integer声明的变量的就用变量.,没有的用Integer
String转int :str作参数传进Integer,int a = Integer.parseInt(str); int b = Integer.valueOf(str).intValue()

3,修饰符
protected 修饰符指定,对同一包内的类和所有子类可见。

private修饰的变量要通过get ,set来访问,不能通过访问属性的方式访问。

父类中声明为 private 的方法,不能够被继承。

static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

final修饰的变量,基本数据类型不能改变值,但是可以改变引用。

synchronized 关键字声明的方法同一时间只能被一个线程访问。确保线程安全,volatile 就是动态改变共享内存的值,使其具有共享的特性。(方法访问类变量就是共享内存了,多用于线程当中,static是实例化后)

4,StringBuffer比较安全,StringBuilder比较快,对于频繁的(因为可以 .append)string类型操作使用这两个而不是string

5,java数组,是说某某数组,比如字符串数组String[],由String堆积起来的数组。这就解释了ArrayList泛型。

6,String类里面是根据值来计算hashcode的,所以值相等,hashcode就相等。

7,java浅复制和深复制,还有复制。首先最简单的的=,把引用复制给另外一个变量,里面的值发生改变会影响其他变量。

  @Override
         protected Object clone() throws CloneNotSupportedException {
             //Person person = (Person) super.clone();
             //person.name = (String)this.name.clone();
             return super.clone();
         }

如果重写了object里面的object方法,

  Person p = new Person("hejian", 100);
        Person p1;
        try {
            p1 = (Person)p.clone();

这种复制方式会复制一个新的对象,就是对象的hashcode不会相同,但是这属于浅复制,对象的属性仍是复制引用(可以说对象于对象属性由地址引用),如果这个属性是非string引用类型

 Student newStudent = (Student) super.clone();
        newStudent.professor = (Professor) professor.clone();
        return newStudent;

把属性也复制值,但是要是string类型的话,需要思考如何实现,如7下的代码。
传送门
任意门

未完待续..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值