对编码的学习

Unicode 和 utf-8

 都知道计算机是只能处理二进制的,在计算机的操作中,主要就是输入处理和输出,如果输入的是一个数字能够直接用一个二进制进行表示,那么如果输入的是一个字符呢,或者是一个字符数字呢
 因为最先出来的计算机是处理英文的,所有定义了一个ASCll的编码表,用来表示所有的英文字母和键盘上的所有符号,所以一个ASCll码只需要一个字节就能表示。但是后来引入了中文,中文的字面量是很大的
 一个字节已经远远不能满足了,所有对ASCll进行了扩充,提出了Unicode,它只是对每一个字符进行一个编码,但是他并不能很好的将这个编码在计算机里进行传输,所以提出了UTF-8,utF-8可以说是对
 Unicode的一种实现,他也是在Unicode编码的基础上,对相关的二进制码在次进行编码,用来减少其在内存和磁盘中所占内存大小。

 https://zhidao.baidu.com/question/55064977.html?qbl=relate_question_0&word=unicode%BA%CDutf8%B5%C4%B9%D8%CF%B5

 所以如果非得说一个字符在内存占有几个字节,这个主要是根据编码方式的不同而不同的,常用的UTF-8是占据2个字节,如果太生僻的字,是可能占据三个字节的,这个在进行utf-8编码时,已经自动处理。

java 对象内存简单理解

 基础数据类型,在创建的时候,先创建一个变量a,然后在内存(可能是堆,可能是栈,这里是栈中,因为在方法内)创建一个区域吧97这个值存放进去。
   当在一个创建一个char类型的b时,会先去检查内存中有没有一块区域的值为97, 有,则把该块内存的地址复制给b.所以a == b; 但是当 a 指向的这块内存值改变时,
   会去新的内存里存放改变的值,所以这时a != b,而且b的地址是没变的,只有a的地址值变化了。
   
    aaa == a?
    这里可以很好的证明所以数据在内存中存放的都是二进制码,或者说都是一个个的字节,所以在新建变量 aa 的时候,会发现内存中有这么一块区域的值为 97 的字节码,所以
    aa 就认为这块区域就是和我要存的值一样,就把地址指向了这块区域,所以 aaa == a;

    //char
    char a = 97;
    System.out.println("---- : " + a);// ---- : a

    char b = 'a';
    System.out.println(" ----b: " + b);// ----b: a

    System.out.println( a == b);// true

    int aa = 2;
    int bb = 2;
    System.out.println( aa == bb);//true

    int aaa = 97;
    System.out.println( a == aaa); //true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值