【Java笔记】2-Java和C++/Go等基础语法不同之处

时间:2024-10-31 07:49:49

这里主要整理自己在学习Java过程中需要记忆的东西,本人学过一些C++、Golang、Python等,所以针对自己的记忆点进行整理,不全面,只针对自己,若读者在读此博客过程中发现感兴趣内容,不甚荣幸

不同进制的数字表示

在Java中,不同进制的数字用不同的前缀表示,具体如下:

//二进制101 以0b开头,即十进制5
int a = 0b101
//八进制101 以0开头,即十进制64+1=65
int b = 0101
//十六进制11 以0x开头,即十进制16+1=17
int c = 0x11

字符串常量相等,new出来的字符串不相等

//sa sb不相等
String sa=new String("helloworld")
String sb=new String("helloworld")
//sc sd相等
String sc="hello world"
String sd="hello world"

所以,判断某字符串变量是否等于某字符串时,应该使用

str.equas("字符串")

而不是直接判断等于

数字+字符串

这个有点颠覆我的看法,竟然会转字符串

//输出 11
System.out.println(""+1+1);
//输出 2
System.out.println(1+1+"");
//输出 1.01.0
System.out.println(""+1.0+1.0);
//输出 2.0
System.out.println(1.0+1.0+"");

类型转换

运算时类型转换向高的对齐再运算
byte->short->char->int->long->float->long
赋值时低的向高的自动转换,高的向低的强制转换
boolean不能进行转换

Java中的boolean占几个字节?

先说结论:简单来说,单个boolean占4个字节,boolean数组占1个字节
理由来源是《Java虚拟机规范》一书中的描述:

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。

但是但是!具体还要看虚拟机是否按照规范来!
那么怎么看呢?呃,也不知道怎么输出地址,先留坑吧!

参考:https://www.cnblogs.com/baiqiantao/p/11440327.html

关于类的静态变量

类的静态变量可以直接被本类调用
非静态变量不能被本类直接调用,得初始化一个对象并调用该对象的非静态参数

public class Test {
    static int tp=1;
    int tp1=1;
    public static void main(String[] args) {
        System.out.println(tp);//可以
        System.out.println(tp1);//报错
    }
}

Java的常量

常量不是const,而是final,一般用大写
static final double PI = 3.14 其中static final位置可以互换
前面可以加public等等
给自己个规定,顺序如下:

(public) (static) (final) double PI = 3.14

变量命名

见名知意
类成员变量:首字母小写+驼峰
局部变量:首字母小写+驼峰
常量:大写字母下划线MAX_VALUE
类名:首字母大写+驼峰
方法名:首字母小写+驼峰

运算符

instanceof也是运算符,用于判断左边的对象是否为右边类(或右边类子类)的实例

// 定义一个父类
class Parent {}
// 定义一个子类继承自父类
class Child extends Parent {}
public class InstanceOfExample {
    public static void main(String[] args) {
        Parent parent = new Parent();
        Child child = new Child();
        // 使用 instanceof 进行类型检查
        System.out.println("parent instanceof Parent: " + (parent instanceof Parent)); // 输出 true
        System.out.println("child instanceof Parent: " + (child instanceof Parent));   // 输出 true
        System.out.println("parent instanceof Child: " + (parent instanceof Child));   // 输出 false
        System.out.println("child instanceof Child: " + (child instanceof Child));     // 输出 true
    }
}

Scanner类输入输出

后续刷题再仔细整理,nextInt()感觉可以常用

数组定义

很奇怪
C++是
int a[3]={1,2,3};
Java是
int[] a={1,2,3};
若不定长,则是
int[] a=new int[5];
具体的后面数组那节再说

增强for循环

for(int x:numbers){
  sout(x)
}

方法重载

函数名一样,根据传入参数的不同来标识(个数、类型、排列顺序),返回类型无所谓