想了解Java,将null分配给对象和just声明有什么区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于java中null是对象吗的相关问题,此外,我们还将为您介绍关于Android一行
想了解Java,将null分配给对象和just声明有什么区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于java中null是对象吗的相关问题,此外,我们还将为您介绍关于Android 一行 getText() 声明有什么区别?、c – 为什么可以将nullptr分配给std :: string?、c# – 将null分配给可空的int – “值”null“对属性无效”、C#和Java有什么区别和联系的新知识。
本文目录一览:- Java,将null分配给对象和just声明有什么区别(java中null是对象吗)
- Android 一行 getText() 声明有什么区别?
- c – 为什么可以将nullptr分配给std :: string?
- c# – 将null分配给可空的int – “值”null“对属性无效”
- C#和Java有什么区别和联系
Java,将null分配给对象和just声明有什么区别(java中null是对象吗)
之间有什么区别:
Object o = null
; 和Object o;
(只是声明)
有人可以回答我吗?
答案1
小编典典这取决于您声明变量的范围。例如,在这种情况下, 局部变量 没有default values
,您将不得不手动分配 null
,在这种情况下,由于实例变量获取默认值,因此在 实例变量的 情况 下 分配null是多余的。
public class Test { Object propertyObj1; Object propertyObj2 = null; // assigning null is redundant here as instance vars get default values public void method() { Object localVariableObj1; localVariableObj1.getClass(); // illegal, a compiler error comes up as local vars don''t get default values Object localVariableObj2 = null; localVariableObj2.getClass(); // no compiler error as localVariableObj2 has been set to null propertyObj1.getClass(); // no compiler error propertyObj2.getClass(); // no compiler error }}
Android 一行 getText() 声明有什么区别?
如何解决Android 一行 getText() 声明有什么区别??
有什么区别?它们实际上不是一回事吗?
我收到“无法解析‘视图’中的‘getText’方法”
string = findViewById(R.id.signup_email).getText().toString();
但它工作得很好。
textView = findViewById(R.id.signup_email);
string = textView.getText().toString();
解决方法
你可以这样做
((TextView)findViewById(R.id.signup_email)).getText().toString();
如果您只执行 findViewById
,您将获得 View
作为返回的对象,它是 TextView
的父对象,但可以使用的方法有限。因此,如果我们知道我们的视图是什么类型,我们应该将对象强制转换为正确的视图,这样我们就可以执行特定于该视图的各种操作。
在这种情况下,TextView
就是我们将其转换为它的原因,然后我们就可以使用 getText()
中没有的 TextView 类的 View
方法类,因此您在使用该方法时遇到编译错误。
首先findViewById(R.id.signup_email)
返回View
对象,所以当你写这个语句findViewById(R.id.signup_email).getText()
这里getText()
适用于view
对象(显然{{1} }} 类不包含此方法)。
但是,当您分成两行时,此处的 View
textView = findViewById(R.id.signup_email);
对象将被类型转换为 View
或 TextView
(您定义的)对象。所以从这里你会得到这个方法。
如果你想保持单行,你可以使用
EditText
,
findViewById() 返回一个视图。所以视图没有 getText() 方法。所以如果你修改第一个选项如下:
string = ((TextView)findViewById(R.id.signup_email)).getText().toString();
有了这个,它会将视图转换为 TextView,然后您可以调用 get text 方法。
c – 为什么可以将nullptr分配给std :: string?
#include <string> #include <iostream> using namespace std; class Meh{ int x; }; class Foo { private: std::string x=nullptr; Meh y=nullptr; //remove this line and it compiles public: std::string z=nullptr; }; int main(void) { Foo f; cout << f.z; return 0; }
正如您所看到的,我尝试将nullptr分配给一个类的随机实例,但它不起作用.字符串中有什么神奇之处可以让它工作,这种语法甚至是有效的?我假设在这种情况下我会遇到类型转换错误.
作为参考,我用这个编译:
clang++ test.cpp -O3 -g -fno-inline -std=c++11 -Wall
它没有给出任何形式的警告,但如果不使用C 11则会出错
解决方法
std::string
中有
constructors(链接中的数字(5))和0700(链接中的数字(3)),因为
std::string
接受了一个const char *,因此nullptr匹配.
在C 11之前(因此在nullptr之前),当您尝试从0或NULL构造时,会出现同样的问题.所有这些情况都是非法的并导致未定义的行为,尽管过去至少有一个STL(RogueWave?)接受它并生成一个空字符串.
c# – 将null分配给可空的int – “值”null“对属性无效”
[displayName("Region")] public int? RegionId { get; set; }
我将我的视图模型传递给我的控制器,如果RegionId为空,它将在ModelState.IsValid失败.如果我传递一个整数,它可以正常工作.
错误信息是:
The value ‘null’ is not valid for Region
在我检查ModelState.IsValid之前,我也尝试过调用它,但是我得到了同样的错误:
if (viewmodel.RegionId == null) viewmodel.RegionId = (int?)null;
这里有什么问题?为什么不能将null赋值给可空的东西?
解决方法
DataAnnotationsModelValidatorProvider.AddImplicitrequiredAttributeForValueTypes = false;
问题是,即使对于可空值类型,默认情况下,默认ValidatorProvider添加“必需”属性.
C#和Java有什么区别和联系
由于公司同是使用.NET和JAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加密。因此会涉及到秘钥的转换。所以大概看了下C#的秘钥跟JAVA的秘钥区别。
RSA对于程序本身是没有区别的,其格式都是相同的。对于不同的程序来说,存储使用的语法(包装的类)会有所不同。
RSA语法和语法标准有很多,大的类型大概分为ASN.1、PKCS、X.509。
RSA语法介绍
ASN.1、PKCS是最初的,也是最主要的RSA公钥和私钥的语法标准,被RSA Lab所维护。
ASN.1、PKCS#1都定义了公钥和私钥的类型――序列化的数字。为了下一个层次的抽象(适当的包装),现在一般使用的组合是:PKCS#8的私钥,X.509的公钥 。
PKCS语法主要用于私钥,其内部标准目前有10种。目前JAVA普遍使用的是PKCS#8,用作私钥格式。
X.509语法主要用于公钥,广泛使用于web浏览器和sll。
3种语法标准的公私钥可以实现相互转化,其核心为ASN1语法中的整数值(modulus,PublicExponent,privateExponent )。
.NET使用的是标准的RSA格式,然后将其中的数字base64编码后,生成XML进行存储。
java中使用的是PKCS#8,、X.509的公私钥语法,存储的都是相应的java类自动生成的base64字符串。
由于存储格式的区别,在相互转换、读取的时候,需要理解RSA相关的知识,才能正确使用类来转换。
C#转JAVA
C#中的公私钥使用XML字符串进行存储,读取时直接读入字符串即可。
由于C#使用的是标准的RSA格式,因此JAVA的RSAPublicKeySpec、RSAPrivateKeySpec配置类的核心参数(modulus,PublicExponent,privateExponent )都可以从对应XML中的节点值(Modulus-modulus 、Exponent-PublicExponent 、D-privateExponent )base64解码后获取。然后将其传入JAVA配置类中,然后根据配置类生成相应的RSA公私钥。
JAVA转C#
JAVA中的公私钥使用base64进行存储,解码成字节数组后,需要先生成相应的配置对象(PKCS#8,、X.509 ),根据配置生成RSA公私钥。
byte[] m = Base64.decodeBase64("mX/9zl8rflH5pLaP5P1Qd/9wXwNBSx7OpLlYDnGr7wD0njiDfPSUkgf9oF5NcvZwl24qdJ1SLmrgUtnr+yeXBNZNKaan1xXKISHdlHvbW5G8nJCJW6cuaHMkVw3Y7kwaIIlUdv09vxfjj0AoabttjbtF1kqETzbQ6fK3EN6sY5U="); byte[] e = Base64.decodeBase64("AQAB"); BigInteger b1 = new BigInteger(1,m); BigInteger b2 = new BigInteger(1,e); byte[] m1 = Base64.decodeBase64("3RgqP5YOYUXft8YOlDphyaCoof27MSfTD2eVCFVXB5hatrls1fSUcmUuWuGV970sS6KQZZtyWHQ5970sCzKFlq82He8Uoe0JM3axBvd6PbSGjulUJr62qNW5hgkIEfxSRYl8AQsbbusFtks4obfepsfE02cLmmZepnZAdioWifE="); byte[] e1 = Base64.decodeBase64("QcSZdLbHakolxX4GAjPnuNmwsBdRIsss7o0qeQMh02GPwoegDfkmW20bv+8Q9FPypEEkYQU/m25ffAFq453QvLegYYi8OvWN+dvgchQRdeb22d+s6xYGGN9DRcPFRE48INde8FBHf/lzVgToV75h1H7g+jB4hLmLeuIuHsB43/0="); BigInteger b11 = new BigInteger(1,m1); BigInteger b21 = new BigInteger(1,e1); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1,b2); RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(keySpec); RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(b11,b21); RSAPrivateKey priKey = (RSAPrivateKey) keyFactory.generatePrivate(priKeySpec);
私钥
C#使用的是标准的RSA格式,PKCS#1语法中包含了标准RSA格式私钥中的所有整数值。配置对象需要生成PKCS#1语法的RSA对象(RSAPrivateCrtKey),获取对象属性,自行构造私钥XML。
private static String getRSAPrivateKeyAsNetFormat(byte[] encodedPrivateKey) { try { StringBuffer buff = new StringBuffer(1024); PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory.generatePrivate(pvkKeySpec); buff.append("<RSAkeyvalue>"); buff.append("<Modulus>" + encodeBase64(removeMSZero(pvkKey.getModulus().toByteArray())) + "</Modulus>"); buff.append("<Exponent>" + encodeBase64(removeMSZero(pvkKey.getPublicExponent()toByteArray())) + "</Exponent>"); buff.append("<P>" + encodeBase64(removeMSZero(pvkKey.getPrimeP().toByteArray())) + "</P>"); buff.append("<Q>" + encodeBase64(removeMSZero(pvkKey.getPrimeQ().toByteArray())) + "</Q>"); buff.append("<DP>" + encodeBase64(removeMSZero(pvkKey.getPrimeExponentP().toByteArray())) + "</DP>"); buff.append("<DQ>" + encodeBase64(removeMSZero(pvkKey.getPrimeExponentQ().toByteArray())) + "</DQ>"); buff.append("<InverseQ>" + encodeBase64(removeMSZero(pvkKey.getCrtCoefficient().toByteArray())) + "</InverseQ>"); buff.append("<D>" + encodeBase64(removeMSZero(pvkKey.getPrivateExponent().toByteArray())) + "</D>"); buff.append("</RSAkeyvalue>"); return buff.toString(); } catch (Exception e) { System.err.println(e); return null; } }
公钥
公钥跟私钥生成步骤相同,配置生成标准的RSA对象(RSAPublicKey)。
private static String getRSAPublicKeyAsNetFormat(byte[] encodedPublicKey) { try { StringBuffer buff = new StringBuffer(1024); //Only RSAPublicKeySpec and X509EncodedKeySpec supported for RSA public keys KeyFactory keyFactory = KeyFactory.getInstance("RSA"); RSAPublicKey pukKey = (RSAPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(encodedPublicKey)); buff.append("<RSAkeyvalue>"); buff.append("<Modulus>" + encodeBase64(removeMSZero(pukKey.getModulus().toByteArray())) + "</Modulus>"); buff.append("<Exponent>" + encodeBase64(removeMSZero(pukKey.getPublicExponent().toByteArray())) + "</Exponent>"); buff.append("</RSAkeyvalue>"); return buff.toString(); } catch (Exception e) { System.err.println(e); return null; } }
以上所述是小编给大家介绍的C#和Java有什么区别和联系,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
关于Java,将null分配给对象和just声明有什么区别和java中null是对象吗的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android 一行 getText() 声明有什么区别?、c – 为什么可以将nullptr分配给std :: string?、c# – 将null分配给可空的int – “值”null“对属性无效”、C#和Java有什么区别和联系的相关信息,请在本站寻找。
本文标签: